+2013-08-14 Vladimir Serbinenko <phcoder@gmail.com>
+
+ 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 <phcoder@gmail.com>
* configure.ac: Error if no $BUILD_CC could be found.
sh $(top_srcdir)/geninit.sh `cat $<` > $@ || (rm -f $@; exit 1)
CLEANFILES += grub_fstest_init.c
-if COND_GRUB_MKFONT
if COND_HAVE_FONT_SOURCE
pkgdata_DATA += unicode.pf2 ascii.pf2 euro.pf2 ascii.h widthspec.h
endif
-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: util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/argp_common.c grub-core/kern/emu/misc.c util/misc.c grub-core/gnulib/progname.c
+ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -I$(top_srcdir)/grub-core/gnulib -DGRUB_MKFONT=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) $(LIBINTL)
+
+build-grub-bin2h: util/bin2h.c
+ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $<
+
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) grub-mkfont
- ./grub-mkfont -s 10 -o $@ $(DJVU_FONT_SOURCE)
-dejavu_12.pf2: $(DJVU_FONT_SOURCE) grub-mkfont
- ./grub-mkfont -s 12 -o $@ $(DJVU_FONT_SOURCE)
-dejavu_14.pf2: $(DJVU_FONT_SOURCE) grub-mkfont
- ./grub-mkfont -s 14 -o $@ $(DJVU_FONT_SOURCE)
-dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) grub-mkfont
- ./grub-mkfont -b -s 14 -o $@ $(DJVU_FONT_SOURCE)
-dejavu_16.pf2: $(DJVU_FONT_SOURCE) grub-mkfont
- ./grub-mkfont -s 16 -o $@ $(DJVU_FONT_SOURCE)
+dejavu_10.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
+ ./build-grub-mkfont -s 10 -o $@ $(DJVU_FONT_SOURCE)
+dejavu_12.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
+ ./build-grub-mkfont -s 12 -o $@ $(DJVU_FONT_SOURCE)
+dejavu_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
+ ./build-grub-mkfont -s 14 -o $@ $(DJVU_FONT_SOURCE)
+dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
+ ./build-grub-mkfont -b -s 14 -o $@ $(DJVU_FONT_SOURCE)
+dejavu_16.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
+ ./build-grub-mkfont -s 16 -o $@ $(DJVU_FONT_SOURCE)
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) grub-mkfont
- ./grub-mkfont -o $@ $(FONT_SOURCE)
+unicode.pf2: $(FONT_SOURCE) build-grub-mkfont
+ ./build-grub-mkfont -o $@ $(FONT_SOURCE)
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) grub-mkfont
- ./grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES)
+ascii.pf2: $(FONT_SOURCE) build-grub-mkfont
+ ./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES)
CLEANFILES += ascii.pf2
-euro.pf2: $(FONT_SOURCE) grub-mkfont
- ./grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES)
+euro.pf2: $(FONT_SOURCE) build-grub-mkfont
+ ./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES)
CLEANFILES += euro.pf2
-ascii.bitmaps: $(FONT_SOURCE) grub-mkfont
- ./grub-mkfont --ascii-bitmaps -o $@ $(FONT_SOURCE)
+ascii.bitmaps: $(FONT_SOURCE) build-grub-mkfont
+ ./build-grub-mkfont --ascii-bitmaps -o $@ $(FONT_SOURCE)
CLEANFILES += ascii.bitmaps
-ascii.h: ascii.bitmaps grub-bin2h
- ./grub-bin2h ascii_bitmaps < $< > $@
+ascii.h: ascii.bitmaps build-grub-bin2h
+ ./build-grub-bin2h ascii_bitmaps < $< > $@
CLEANFILES += ascii.h $(top_builddir)/grub-core/include/ascii.h
-widthspec.bin: $(FONT_SOURCE) grub-mkfont
- ./grub-mkfont --width-spec -o $@ $(FONT_SOURCE)
+widthspec.bin: $(FONT_SOURCE) build-grub-mkfont
+ ./build-grub-mkfont --width-spec -o $@ $(FONT_SOURCE)
CLEANFILES += widthspec.bin
-widthspec.h: widthspec.bin grub-bin2h
- ./grub-bin2h widthspec < $< > $@
+widthspec.h: widthspec.bin build-grub-bin2h
+ ./build-grub-bin2h widthspec < $< > $@
CLEANFILES += widthspec.h
# Install config.h into platformdir
common = grub-core/lib/xzembed/xz_dec_stream.c;
};
-program = {
- name = grub-bin2h;
- common = util/bin2h.c;
- ldadd = libgrubmods.a;
- ldadd = libgrubgcry.a;
- ldadd = libgrubkern.a;
- ldadd = grub-core/gnulib/libgnu.a;
- ldadd = '$(LIBINTL) $(LIBDEVMAPPER)';
- installdir = noinst;
-};
-
program = {
name = grub-mkimage;
mansection = 1;
common = util/grub-mkfont.c;
common = grub-core/unidata.c;
common = grub-core/kern/emu/argp_common.c;
+ common = grub-core/kern/emu/misc.c;
+ common = util/misc.c;
+ common = grub-core/gnulib/progname.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)';
+ ldadd = '$(LIBINTL)';
condition = COND_GRUB_MKFONT;
};
CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/include
CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/
CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1
+BUILD_CPPFLAGS += $(CPPFLAGS_DEFAULT)
LDADD_KERNEL =
TARGET_CFLAGS="$TARGET_CFLAGS -Os"
fi
+BUILD_CPPFLAGS="$BUILD_CPPFLAGS -DLOCALEDIR=\\\"\$(localedir)\\\""
+
# Default HOST_CPPFLAGS
HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
AC_MSG_ERROR([bison is not found])
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
- FONT_SOURCE="$dir/unifont.$ext"
- break 2
- fi
- done
-done
-
-if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips); then
- AC_MSG_ERROR([qemu and loongson ports need unifont])
-fi
-
-AC_SUBST([FONT_SOURCE])
-
AC_PROG_RANLIB
AC_PROG_INSTALL
AC_PROG_AWK
fi
AC_SUBST(HOST_CC)
AC_SUBST(BUILD_CC)
+AC_SUBST(BUILD_CFLAGS)
+AC_SUBST(BUILD_CPPFLAGS)
AC_SUBST(TARGET_CC)
# Test the C compiler for the target environment.
else
enable_grub_mkfont=no
fi
-if test x"$enable_grub_mkfont" = xno && test "x$platform" = xloongson; then
- AC_MSG_ERROR([loongson port needs grub-mkfont])
-fi
AC_SUBST([enable_grub_mkfont])
AC_SUBST([freetype_cflags])
AC_SUBST([freetype_libs])
-DJVU_FONT_SOURCE=
+SAVED_CC="$CC"
+SAVED_CFLAGS="$CFLAGS"
+SAVED_CPPFLAGS="$CPPFLAGS"
+CC="$BUILD_CC"
+CFLAGS="$BUILD_CFLAGS"
+CPPFLAGS="$SAVED_CPPFLAGS"
-starfield_excuse=
+if test x"$grub_build_mkfont_excuse" = x ; then
+ # Check for freetype libraries.
+ AC_CHECK_TOOLS([BUILD_FREETYPE], [freetype-config])
+ if test "x$BUILD_FREETYPE" = x ; then
+ grub_build_mkfont_excuse=["need freetype2 library"]
+ fi
+fi
-if test x$enable_grub_mkfont = xno; then
- starfield_excuse="No grub-mkfont"
+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"
+ CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
+ AC_CHECK_HEADERS([ft2build.h], [],
+ [grub_build_mkfont_excuse=["need freetype2 headers"]])
+ 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])
+fi
+if test x"$grub_build_mkfont_excuse" = x ; then
+ enable_build_grub_mkfont=yes
+else
+ enable_build_grub_mkfont=no
+ starfield_excuse="No build-time grub-mkfont"
+ FONT_SOURCE=
fi
+if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips ); then
+ AC_MSG_ERROR([loongson port needs build-time grub-mkfont])
+fi
+
+AC_SUBST([build_freetype_cflags])
+AC_SUBST([build_freetype_libs])
+
+CC="$SAVED_CC"
+CFLAGS="$SAVED_CFLAGS"
+CPPFLAGS="$SAVED_CPPFLAGS"
+
+
+DJVU_FONT_SOURCE=
+
+starfield_excuse=
if test x"$starfield_excuse" = x; then
for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
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
+ FONT_SOURCE="$dir/unifont.$ext"
+ break 2
+ fi
+ done
+done
+
+if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips ); then
+ AC_MSG_ERROR([qemu and loongson ports need unifont])
+fi
+
+AC_SUBST([FONT_SOURCE])
+
+if test x"$FONT_SOURCE" = x && test x"$DJVU_FONT_SOURCE" = 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)])])
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_BUILD_GRUB_MKFONT], [test x$enable_build_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])
AM_CONDITIONAL([COND_GRUB_PE2ELF], [test x$TARGET_OBJ2ELF != x])
else
echo With libzfs support: No "($libzfs_excuse)"
fi
-if test "x$FONT_SOURCE" = x ; then
-echo "Without unifont"
+if [ x"$build_grub_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 "With unifont from $FONT_SOURCE"
+ echo Build-time grub-mkfont: No "($build_grub_mkfont_excuse)"
+ echo "Without unifont (no build-time grub-mkfont)"
fi
if test "x$LIBLZMA" = x ; then
echo "Without liblzma (no support for XZ-compressed mips images)"
CPP=$(TARGET_CC)
CCAS=$(TARGET_CC)
-if COND_GRUB_MKFONT
if COND_HAVE_FONT_SOURCE
TARGET_CFLAGS += -DUSE_ASCII_FALLBACK=1 -DHAVE_UNIFONT_WIDTHSPEC=1
endif
-endif
MACHO2IMG=$(top_builddir)/grub-macho2img
# gentrigtables
gentrigtables: gentrigtables.c
- $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(CPPFLAGS) $< -lm
+ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $< -lm
CLEANFILES += gentrigtables
# trigtables.c
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/cpu/cache.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/serial.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
return newstr;
}
+#ifndef GRUB_MKFONT
char *
xasprintf (const char *fmt, ...)
{
return result;
}
+#endif
void
grub_exit (void)
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <config.h>
#include <stdio.h>
#include <stdlib.h>
-#define _GNU_SOURCE 1
-#include <getopt.h>
-
-#include "progname.h"
-
-static struct option options[] =
- {
- {"help", no_argument, 0, 'h' },
- {"version", no_argument, 0, 'V' },
- {0, 0, 0, 0 }
- };
-
-static void __attribute__ ((noreturn))
-usage (int status)
-{
- if (status)
- fprintf (stderr,
- "Try ``%s --help'' for more information.\n", program_name);
- else
- printf ("\
-Usage: %s [OPTIONS] SYMBOL-NAME\n\
-\n\
-Convert a binary file to a C header.\n\
-\n\
- -h, --help display this message and exit\n\
- -V, --version print version information and exit\n\
-\n\
-Report bugs to <%s>.\n\
-", program_name, PACKAGE_BUGREPORT);
-
- exit (status);
-}
-
int
main (int argc, char *argv[])
{
int b, i;
char *sym;
- set_program_name (argv[0]);
-
- /* Check for options. */
- while (1)
- {
- int c = getopt_long (argc, argv, "snm:r:hVv", options, 0);
-
- if (c == -1)
- break;
- else
- switch (c)
- {
- case 'h':
- usage (0);
- break;
-
- case 'V':
- printf ("%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION);
- return 0;
-
- default:
- usage (1);
- break;
- }
- }
-
- if (optind >= argc)
- usage (1);
-
- if (optind + 1 != argc)
- usage (1);
+ if (2 != argc)
+ return 1;
- sym = argv[optind];
+ sym = argv[1];
b = getchar ();
if (b == EOF)
{
FILE *file;
grub_uint32_t leng;
- char style_name[20], *font_name;
+ char style_name[20], *font_name, *ptr;
int offset;
struct grub_glyph_info *cur;
if (! style_name[0])
strcpy (style_name, " Regular");
- font_name = xasprintf ("%s %s %d", font_info->name, &style_name[1],
- font_info->size);
+ font_name = xmalloc (strlen (font_info->name) + strlen (&style_name[1])
+ + 3 + 20);
+ ptr = stpcpy (font_name, font_info->name);
+ *ptr++ = ' ';
+ ptr = 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);
arguments.font_index, &ft_face);
if (err)
{
- grub_printf (_("can't open file %s, index %d: error %d"),
- arguments.files[i],
- arguments.font_index, 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