diff --git a/Makefile.in b/Makefile.in index f82566a..77e9250 100644 --- a/Makefile.in +++ b/Makefile.in @@ -92,6 +92,7 @@ HELP2MAN = true else HELP2MAN := LANG=C $(HELP2MAN) --no-info --source=FSF endif +MSGFMT = @MSGFMT@ AWK = @AWK@ LIBCURSES = @LIBCURSES@ LIBLZO = @LIBLZO@ @@ -108,6 +109,7 @@ enable_grub_mkfont = @enable_grub_mkfont@ freetype_cflags = @freetype_cflags@ freetype_libs = @freetype_libs@ enable_efiemu = @enable_efiemu@ +enable_languages = @enable_languages@ ### General variables. diff --git a/conf/common.rmk b/conf/common.rmk index fbca2e4..2fa6836 100644 --- a/conf/common.rmk +++ b/conf/common.rmk @@ -598,3 +598,10 @@ pkglib_MODULES += xnu_uuid.mod xnu_uuid_mod_SOURCES = commands/xnu_uuid.c xnu_uuid_mod_CFLAGS = $(COMMON_CFLAGS) xnu_uuid_mod_LDFLAGS = $(COMMON_LDFLAGS) + +LANGUAGES = ca.mo +ifeq ($(enable_languages), yes) +pkglib_DATA += $(LANGUAGES) +%.mo: po/%.po + $(MSGFMT) $< -o $@ +endif diff --git a/configure.ac b/configure.ac index a8cb234..34570a8 100644 --- a/configure.ac +++ b/configure.ac @@ -433,6 +433,34 @@ AH_BOTTOM([#if defined(__i386__) && !defined(GRUB_UTIL) #define NESTED_FUNC_ATTR #endif]) +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="explicitely disabled" +fi +if test x"$efiemu_excuse" = x ; then + AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_no_red_zone, [ + CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib -c" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_efiemu=yes], + [grub_cv_cc_efiemu=no]) + ]) + if test x$grub_cv_cc_efiemu = x$no; then + efiemu_excuse="compiler doesn't support compiling with -m64 -mcmodel=large -mno-red-zone -nostdlib -c" + fi +fi +if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then + AC_MSG_ERROR([efiemu runtime was explicitely requested but can't be compiled]) +fi +if test x"$efiemu_excuse" = x ; then +enable_efiemu=yes +else +enable_efiemu=no +fi +AC_SUBST([enable_efiemu]) + + # Restore the flags. CC="$tmp_CC" CFLAGS="$tmp_CFLAGS" @@ -453,40 +481,75 @@ AC_ARG_ENABLE([mm-debug], AC_ARG_ENABLE([grub-emu], [AS_HELP_STRING([--enable-grub-emu], - [build and install the `grub-emu' debugging utility])]) + [build and install the `grub-emu' debugging utility (default=guessed)])]) AC_ARG_ENABLE([grub-emu-usb], [AS_HELP_STRING([--enable-grub-emu-usb], - [build and install the `grub-emu' debugging utility with USB support])]) -[if [ x"$enable_grub_emu" = xyes ]; then - # Check for curses libraries.] + [build and install the `grub-emu' debugging utility with USB support (default=guessed)])]) +if test x"$enable_grub_emu" = xno ; then + grub_emu_excuse="explicitely disabled" +fi + + [# Check for curses libraries.] +[if [ x"$grub_emu_excuse" = x ]; then ] AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"], [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"], - [AC_MSG_ERROR([(n)curses libraries are required to build `grub-emu'])])]) + [grub_emu_excuse=["(n)curses libraries are required to build \`grub-emu'"]])]) AC_SUBST([LIBCURSES]) - +[fi] +[if [ x"$grub_emu_excuse" = x ]; then ] [# Check for headers.] AC_CHECK_HEADERS([ncurses/curses.h], [], [AC_CHECK_HEADERS([ncurses.h], [], [AC_CHECK_HEADERS([curses.h], [], - [AC_MSG_ERROR([(n)curses header files are required to build `grub-emu'])])])]) + [grub_emu_excuse=["(n)curses header files are required to build \`grub-emu'"]])])]) +[fi] - [if [ x"$enable_grub_emu_usb" = xyes ]; then +if test x"$enable_grub_emu" = xyes && test x"$grub_emu_excuse" != x ; then + AC_MSG_ERROR([grub-emu was explicitely requested but can't be compiled]) +fi +if test x"$grub_emu_excuse" = x ; then +enable_grub_emu=yes +else +enable_grub_emu=no +grub_emu_usb_excuse="grub-emu isn't built" +fi +if test x"$enable_grub_emu_usb" = xno ; then + grub_emu_usb_excuse="explicitely disabled" +fi +[if [ x"$grub_emu_usb_excuse" = x ]; then # Check for libusb libraries.] - AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"], - [AC_MSG_ERROR([libusb libraries are required to build `grub-emu' with USB support])]) +AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"], + [grub_emu_usb_excuse=["libusb libraries are required to build \`grub-emu' with USB support"]]) AC_SUBST([LIBUSB]) - - [# Check for headers.] +[fi] +[if [ x"$grub_emu_usb_excuse" = x ]; then + # Check for headers.] AC_CHECK_HEADERS([usb.h], [], - [AC_MSG_ERROR([libusb header file is required to build `grub-emu' with USB support])]) - [fi] + [grub_emu_usb_excuse=["libusb header file is required to build \`grub-emu' with USB support"]]) [fi] +if test x"enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then + AC_MSG_ERROR([USB support for grub-emu was explicitely requested but can't be compiled]) +fi +if test x"$grub_emu_usb_excuse" = x ; then +enable_grub_emu_usb=yes +else +enable_grub_emu_usb=no +fi + AC_SUBST([enable_grub_emu]) AC_SUBST([enable_grub_emu_usb]) AC_ARG_ENABLE([grub-fstest], [AS_HELP_STRING([--enable-grub-fstest], - [build and install the `grub-fstest' debugging utility])]) + [build and install the `grub-fstest' debugging utility (default=guessed)])]) +if test x"$enable_grub_fstest" = xno ; then + grub_fstest_excuse="explicitely disabled" +fi +if test x"$grub_fstest_excuse" = x ; then +enable_grub_fstest=yes +else +enable_grub_fstest=no +fi AC_SUBST([enable_grub_fstest]) AC_ARG_ENABLE([grub-pe2elf], @@ -494,26 +557,58 @@ AC_ARG_ENABLE([grub-pe2elf], [build and install the `grub-pe2elf' conversion utility])]) AC_SUBST([enable_grub_pe2elf]) +AC_ARG_ENABLE([languages], + [AS_HELP_STRING([--enable-languages], + [build and install languages (default=guessed)])]) +if test x"$enable_languages" = xno ; then + languages_excuse="explicitely disabled" +fi + +if test x"$languages_excuse" = x ; then + # Check for freetype libraries. + AC_CHECK_PROGS([MSGFMT], [msgfmt]) + if test "x$MSGFMT" = x ; then + languages_excuse="msgfmt not found" + fi +fi +if test x"$languages_excuse" = x ; then +enable_languages=yes +else +enable_languages=no +fi +if test x"$enable_languages" = xyes && test x"$languages_excuse" != x ; then + AC_MSG_ERROR([language files explicitely requested but can't be compiled]) +fi +AC_SUBST([enable_languages]) + AC_ARG_ENABLE([grub-mkfont], [AS_HELP_STRING([--enable-grub-mkfont], - [build and install the `grub-mkfont' utility])]) -if test x"$enable_grub_mkfont" = xyes ; then + [build and install the `grub-mkfont' utility (default=guessed)])]) +if test x"$enable_grub_mkfont" = xno ; then + grub_mkfont_excuse="explicitely disabled" +fi + +if test x"$grub_mkfont_excuse" = x ; then # Check for freetype libraries. AC_CHECK_PROGS([FREETYPE], [freetype-config]) if test "x$FREETYPE" = x ; then - AC_MSG_ERROR([freetype2 libraries are required to build `grub-mkfont']) + grub_mkfont_excuse=["freetype2 libraries are required to build \`grub-mkfont'"] fi freetype_cflags=`freetype-config --cflags` freetype_libs=`freetype-config --libs` fi +if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then + AC_MSG_ERROR([grub-mkfont was explicitely requested but can't be compiled]) +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]) -AC_ARG_ENABLE([efiemu], - [AS_HELP_STRING([--enable-efiemu], - [build and install the efiemu runtimes])]) -AC_SUBST([enable_efiemu]) AC_SUBST(ASFLAGS) # Output files. @@ -531,3 +626,58 @@ fi AC_CONFIG_FILES([Makefile gensymlist.sh genkernsyms.sh]) AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h]) AC_OUTPUT +[ +echo "*******************************************************" +echo GRUB2 will be compiled with following components: +echo Platform: "$target_cpu"-"$platform" +if test "$target_cpu"-"$platform" = i386-pc; then +if [ x"$enable_lzo" = xyes ]; then +echo Compression: LZO +else +echo Compression: LZMA +fi +fi +if [ x"$grub_emu_excuse" = x ]; then +echo grub-emu: Yes +else +echo grub-emu: No "($grub_emu_excuse)" +fi +if [ x"$grub_emu_usb_excuse" = x ]; then +echo USB support for grub-emu: Yes +else +echo USB support for grub-emu: No "($grub_emu_usb_excuse)" +fi +if [ x"$enable_mm_debug" = xyes ]; then +echo With memory debugging: Yes +else +echo With memory debugging: No +fi +if [ x"$enable_grub_pe2elf" = xyes ]; then +echo grub-pe2elf will be built and installed +elif [ x$TARGET_OBJ2ELF = xgrub-pe2elf ]; then +echo grub-pe2elf will be built but not installed +else +echo grub-pe2elf will not be built +fi +if [ x"$languages_excuse" = x ]; then +echo languages: Yes +else +echo languages: No "($efiemu_excuse)" +fi +if [ x"$efiemu_excuse" = x ]; then +echo efiemu runtime: Yes +else +echo efiemu runtime: No "($efiemu_excuse)" +fi +if [ x"$grub_fstest_excuse" = x ]; then +echo grub-fstest: Yes +else +echo grub-fstest: No "($grub_fstest_excuse)" +fi +if [ x"$grub_mkfont_excuse" = x ]; then +echo grub-mkfont: Yes +else +echo grub-mkfont: No "($grub_mkfont_excuse)" +fi +echo "*******************************************************" +] diff --git a/disk/scsi.c b/disk/scsi.c index 353e639..046dcb8 100644 --- a/disk/scsi.c +++ b/disk/scsi.c @@ -246,65 +246,66 @@ grub_scsi_open (const char *name, grub_disk_t disk) for (p = grub_scsi_dev_list; p; p = p->next) { - if (p->open (name, scsi)) - continue; - disk->id = (unsigned long) "scsi"; /* XXX */ - disk->data = scsi; - scsi->dev = p; - scsi->lun = lun; - scsi->name = grub_strdup (name); - if (! scsi->name) + if (! p->open (name, scsi)) { - grub_free (scsi); - return grub_errno; + disk->id = (unsigned long) "scsi"; /* XXX */ + disk->data = scsi; + scsi->dev = p; + scsi->lun = lun; + scsi->name = grub_strdup (name); + if (! scsi->name) + { + grub_free (scsi); + return grub_errno; + } + + grub_dprintf ("scsi", "dev opened\n"); + + err = grub_scsi_inquiry (scsi); + if (err) + { + grub_free (scsi); + grub_dprintf ("scsi", "inquiry failed\n"); + return grub_errno; + } + + 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"); + } + + if (scsi->devtype == grub_scsi_devtype_cdrom) + disk->has_partitions = 0; + else + disk->has_partitions = 1; + + err = grub_scsi_read_capacity (scsi); + if (err) + { + grub_free (scsi); + grub_dprintf ("scsi", "READ CAPACITY failed\n"); + return grub_errno; + } + + /* SCSI blocks can be something else than 512, although GRUB + wants 512 byte blocks. */ + disk->total_sectors = ((scsi->size * scsi->blocksize) + << GRUB_DISK_SECTOR_BITS); + + grub_dprintf ("scsi", "capacity=%llu, blksize=%d\n", + (unsigned long long) disk->total_sectors, + scsi->blocksize); + + return GRUB_ERR_NONE; } - - grub_dprintf ("scsi", "dev opened\n"); - - err = grub_scsi_inquiry (scsi); - if (err) - { - grub_free (scsi); - grub_dprintf ("scsi", "inquiry failed\n"); - return grub_errno; - } - - 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"); - } - - if (scsi->devtype == grub_scsi_devtype_cdrom) - disk->has_partitions = 0; - else - disk->has_partitions = 1; - - err = grub_scsi_read_capacity (scsi); - if (err) - { - grub_free (scsi); - grub_dprintf ("scsi", "READ CAPACITY failed\n"); - return grub_errno; - } - - /* SCSI blocks can be something else than 512, although GRUB - wants 512 byte blocks. */ - disk->total_sectors = ((scsi->size * scsi->blocksize) - << GRUB_DISK_SECTOR_BITS); - - grub_dprintf ("scsi", "capacity=%llu, blksize=%d\n", - (unsigned long long) disk->total_sectors, - scsi->blocksize); - - return GRUB_ERR_NONE; } grub_free (scsi); diff --git a/genmk.rb b/genmk.rb index 36f4020..f60e377 100644 --- a/genmk.rb +++ b/genmk.rb @@ -310,7 +310,9 @@ class Script "CLEANFILES += address@hidden address@hidden: #{src} $(#{src}_DEPENDENCIES) config.status - ./config.status --file=#{name}:#{src} + ./config.status --file=#{name}.tmp:#{src} + cat address@hidden | sed 's/@pkglib_DATA@/$(pkglib_DATA)/g;' > $@ + -rm -f address@hidden chmod +x $@ " diff --git a/util/i386/pc/grub-install.in b/util/i386/pc/grub-install.in index 5c3ffcd..d266b35 100644 --- a/util/i386/pc/grub-install.in +++ b/util/i386/pc/grub-install.in @@ -231,16 +231,19 @@ if test -n "$tmp"; then fi # Copy the GRUB images to the GRUB directory. -for file in ${grubdir}/*.mod ${grubdir}/*.lst ${grubdir}/*.img ${grubdir}/efiemu??.o; do +for file in ${grubdir}/*.mod ${grubdir}/*.lst ${grubdir}/*.img ${grubdir}/*.mo ${grubdir}/efiemu??.o; do if test -f $file && [ "`basename $file`" != menu.lst ]; then rm -f $file || exit 1 fi done -for file in ${pkglibdir}/*.mod ${pkglibdir}/*.lst; do +for file in ${pkglibdir}/*.mod; do cp -f $file ${grubdir} || exit 1 done +for file in @pkglib_DATA@; do + cp -f ${pkglibdir}/$file ${grubdir} || exit 1 +done if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then - for file in ${pkglibdir}/*.img ${pkglibdir}/efiemu??.o; do + for file in ${pkglibdir}/*.img; do if test -f $file; then cp -f $file ${grubdir} || exit 1 fi