/sbin/grub is always built and grub.8 is produced automatically

This commit is contained in:
okuji 1999-06-23 00:00:54 +00:00
parent 45d89b3d1a
commit a0ca5d0c06
21 changed files with 697 additions and 92 deletions

View file

@ -1,3 +1,29 @@
1999-06-23 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* grub/asmstub.c [__linux__]: Include linux/fs.h for BLKFLSBUF.
(grub_stage2): Call sync before and after calling doit.
(gurb_stage2) [__linux__]: Invalidate buffer caches by BLKFLSBUF
ioctl.
* grub/main.c (main): Call sync first. Suggested by Pavel Roskin
<pavel_roskin@geocities.com>.
* configure.in: Curses libraries are always checked.
(--enable-sbin-grub): Deleted. Now /sbin/grub is always built.
(--enable-maintainer-mode): New option.
* grub/Makefile.am (EXTRA_PROGRAMS): Deleted.
(sbin_PROGRAMS): Just set to grub.
* docs/Makefile.am (man_MANS): New variable.
(HELP2MAN): Likewise.
(noinst_SCRIPTS): Likewise.
(EXTRA_DIST): Add $(man_MANS) and $(noinst_SCRIPTS).
[GRUB_MAINT]: Define the rule for the /sbin/grub manual.
* docs/help2man: Copied from texinfo-3.12i.
(--sector): New option to specify which section a manual belongs
to.
(opt_sector): New variable.
(sector): Likewise.
* docs/grub.8: Produced by help2man automatically.
1999-06-22 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-22 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* shared_src/char_io.c (get_cmdline): Add two missing `break's. * shared_src/char_io.c (get_cmdline): Add two missing `break's.

View file

@ -70,7 +70,6 @@ VERSION = @VERSION@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
install_sh = @install_sh@ install_sh = @install_sh@
sbingrub = @sbingrub@
SUBDIRS = grub stage1 stage2 \ SUBDIRS = grub stage1 stage2 \

13
aclocal.m4 vendored
View file

@ -230,3 +230,16 @@ else
fi fi
AC_SUBST($1)]) AC_SUBST($1)])
# Define a conditional.
AC_DEFUN(AM_CONDITIONAL,
[AC_SUBST($1_TRUE)
AC_SUBST($1_FALSE)
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi])

114
configure vendored
View file

@ -12,7 +12,8 @@ ac_help=
ac_default_prefix=/usr/local ac_default_prefix=/usr/local
# Any additions from configure.in: # Any additions from configure.in:
ac_help="$ac_help ac_help="$ac_help
--enable-sbin-grub build /sbin/grub command-line utility" --enable-maintainer-mode
enable the maintainer mode"
# Initialize some variables set by options. # Initialize some variables set by options.
# The variables have the same names as the options, with # The variables have the same names as the options, with
@ -554,7 +555,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh. # ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:558: checking for a BSD compatible install" >&5 echo "configure:559: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then if test -z "$INSTALL"; then
if eval "test \"\${ac_cv_path_install+set}\" = set"; then if eval "test \"\${ac_cv_path_install+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -611,7 +612,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
echo "configure:615: checking whether build environment is sane" >&5 echo "configure:616: checking whether build environment is sane" >&5
# Just in case # Just in case
sleep 1 sleep 1
echo timestamp > conftestfile echo timestamp > conftestfile
@ -668,7 +669,7 @@ test "$program_suffix" != NONE &&
test "$program_transform_name" = "" && program_transform_name="s,x,x," test "$program_transform_name" = "" && program_transform_name="s,x,x,"
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
echo "configure:672: checking whether ${MAKE-make} sets \${MAKE}" >&5 echo "configure:673: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -717,7 +718,7 @@ EOF
missing_dir=`cd $ac_aux_dir && pwd` missing_dir=`cd $ac_aux_dir && pwd`
echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
echo "configure:721: checking for working aclocal" >&5 echo "configure:722: checking for working aclocal" >&5
# Run test in a subshell; some versions of sh will print an error if # Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected. # an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh. # Redirect stdin to placate older versions of autoconf. Sigh.
@ -730,7 +731,7 @@ else
fi fi
echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
echo "configure:734: checking for working autoconf" >&5 echo "configure:735: checking for working autoconf" >&5
# Run test in a subshell; some versions of sh will print an error if # Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected. # an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh. # Redirect stdin to placate older versions of autoconf. Sigh.
@ -743,7 +744,7 @@ else
fi fi
echo $ac_n "checking for working automake""... $ac_c" 1>&6 echo $ac_n "checking for working automake""... $ac_c" 1>&6
echo "configure:747: checking for working automake" >&5 echo "configure:748: checking for working automake" >&5
# Run test in a subshell; some versions of sh will print an error if # Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected. # an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh. # Redirect stdin to placate older versions of autoconf. Sigh.
@ -756,7 +757,7 @@ else
fi fi
echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
echo "configure:760: checking for working autoheader" >&5 echo "configure:761: checking for working autoheader" >&5
# Run test in a subshell; some versions of sh will print an error if # Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected. # an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh. # Redirect stdin to placate older versions of autoconf. Sigh.
@ -769,7 +770,7 @@ else
fi fi
echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
echo "configure:773: checking for working makeinfo" >&5 echo "configure:774: checking for working makeinfo" >&5
# Run test in a subshell; some versions of sh will print an error if # Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected. # an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh. # Redirect stdin to placate older versions of autoconf. Sigh.
@ -789,7 +790,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args. # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2 set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:793: checking for $ac_word" >&5 echo "configure:794: checking for $ac_word" >&5
if eval "test \"\${ac_cv_prog_AMTAR+set}\" = set"; then if eval "test \"\${ac_cv_prog_AMTAR+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -829,7 +830,7 @@ fi
echo $ac_n "checking host system type""... $ac_c" 1>&6 echo $ac_n "checking host system type""... $ac_c" 1>&6
echo "configure:833: checking host system type" >&5 echo "configure:834: checking host system type" >&5
if test "x$ac_cv_host" = "x" || (test "x$host" != "xNONE" && test "x$host" != "x$ac_cv_host_alias"); then if test "x$ac_cv_host" = "x" || (test "x$host" != "xNONE" && test "x$host" != "x$ac_cv_host_alias"); then
# Make sure we can run config.sub. # Make sure we can run config.sub.
@ -880,22 +881,36 @@ esac
# #
# Options # Options
# #
sbingrub=
# Check whether --enable-sbin-grub or --disable-sbin-grub was given. # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_sbin_grub+set}" = set; then if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_sbin_grub" enableval="$enable_maintainer_mode"
test "x$enableval" = xno || sbingrub=grub case "x${enableval}" in
xyes) maintainermode=yes ;;
xno) maintainermode=no ;;
*) { echo "configure: error: invalid value ${enableval} for --enable-maintainer-mode" 1>&2; exit 1; } ;;
esac
else
maintainermode=no
fi fi
if test "x${maintainermode}" = xyes; then
GRUB_MAINT_TRUE=
GRUB_MAINT_FALSE='#'
else
GRUB_MAINT_TRUE='#'
GRUB_MAINT_FALSE=
fi
# #
# Programs # Programs
# #
echo $ac_n "checking build system type""... $ac_c" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:899: checking build system type" >&5 echo "configure:914: checking build system type" >&5
if test "x$ac_cv_build" = "x" || (test "x$build" != "xNONE" && test "x$build" != "x$ac_cv_build_alias"); then if test "x$ac_cv_build" = "x" || (test "x$build" != "xNONE" && test "x$build" != "x$ac_cv_build_alias"); then
# Make sure we can run config.sub. # Make sure we can run config.sub.
@ -942,7 +957,7 @@ fi
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. # 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 set dummy ${ac_tool_prefix}gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:946: checking for $ac_word" >&5 echo "configure:961: checking for $ac_word" >&5
if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -974,7 +989,7 @@ fi
# Extract the first word of "gcc", so it can be a program name with args. # Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2 set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:978: checking for $ac_word" >&5 echo "configure:993: checking for $ac_word" >&5
if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1004,7 +1019,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args. # Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2 set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1008: checking for $ac_word" >&5 echo "configure:1023: checking for $ac_word" >&5
if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1055,7 +1070,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args. # Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2 set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1059: checking for $ac_word" >&5 echo "configure:1074: checking for $ac_word" >&5
if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1087,7 +1102,7 @@ fi
fi fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:1091: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works" >&5 echo "configure:1106: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works" >&5
ac_ext=c ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@ -1098,12 +1113,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF cat > conftest.$ac_ext << EOF
#line 1102 "configure" #line 1117 "configure"
#include "confdefs.h" #include "confdefs.h"
main(){return(0);} main(){return(0);}
EOF EOF
if { (eval echo configure:1107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler. # If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then if (./conftest; exit) 2>/dev/null; then
@ -1129,12 +1144,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:1133: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "configure:1148: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:1138: checking whether we are using GNU C" >&5 echo "configure:1153: checking whether we are using GNU C" >&5
if eval "test \"\${ac_cv_prog_gcc+set}\" = set"; then if eval "test \"\${ac_cv_prog_gcc+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1143,7 +1158,7 @@ else
yes; yes;
#endif #endif
EOF EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1147: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1162: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes ac_cv_prog_gcc=yes
else else
ac_cv_prog_gcc=no ac_cv_prog_gcc=no
@ -1162,7 +1177,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS" ac_save_CFLAGS="$CFLAGS"
CFLAGS= CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:1166: checking whether ${CC-cc} accepts -g" >&5 echo "configure:1181: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"\${ac_cv_prog_cc_g+set}\" = set"; then if eval "test \"\${ac_cv_prog_cc_g+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1200,7 +1215,7 @@ CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused"
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
set dummy ${ac_tool_prefix}ld; ac_word=$2 set dummy ${ac_tool_prefix}ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1204: checking for $ac_word" >&5 echo "configure:1219: checking for $ac_word" >&5
if eval "test \"\${ac_cv_prog_LD+set}\" = set"; then if eval "test \"\${ac_cv_prog_LD+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1232,7 +1247,7 @@ fi
# Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. # 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 set dummy ${ac_tool_prefix}objcopy; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1236: checking for $ac_word" >&5 echo "configure:1251: checking for $ac_word" >&5
if eval "test \"\${ac_cv_prog_OBJCOPY+set}\" = set"; then if eval "test \"\${ac_cv_prog_OBJCOPY+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1265,7 +1280,7 @@ fi
# Defined in acinclude.m4. # Defined in acinclude.m4.
echo $ac_n "checking symbol names produced by ${CC-cc}""... $ac_c" 1>&6 echo $ac_n "checking symbol names produced by ${CC-cc}""... $ac_c" 1>&6
echo "configure:1269: checking symbol names produced by ${CC-cc}" >&5 echo "configure:1284: checking symbol names produced by ${CC-cc}" >&5
if eval "test \"\${grub_cv_asm_ext_c+set}\" = set"; then if eval "test \"\${grub_cv_asm_ext_c+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1278,7 +1293,7 @@ func (int *list)
} }
EOF EOF
if { ac_try='${CC-cc} -S conftest.c'; { (eval echo configure:1282: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.s; then : if { ac_try='${CC-cc} -S conftest.c'; { (eval echo configure:1297: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.s; then :
else else
{ echo "configure: error: ${CC-cc} failed to produce assembly code" 1>&2; exit 1; } { echo "configure: error: ${CC-cc} failed to produce assembly code" 1>&2; exit 1; }
fi fi
@ -1307,7 +1322,7 @@ EOF
echo $ac_n "checking whether ${OBJCOPY} works for absolute addresses""... $ac_c" 1>&6 echo $ac_n "checking whether ${OBJCOPY} works for absolute addresses""... $ac_c" 1>&6
echo "configure:1311: checking whether ${OBJCOPY} works for absolute addresses" >&5 echo "configure:1326: checking whether ${OBJCOPY} works for absolute addresses" >&5
if eval "test \"\${grub_cv_prog_objcopy_absolute+set}\" = set"; then if eval "test \"\${grub_cv_prog_objcopy_absolute+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1319,21 +1334,21 @@ blah (void)
} }
EOF EOF
if { (eval echo configure:1323: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.o; then : if { (eval echo configure:1338: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.o; then :
else else
{ echo "configure: error: ${CC-cc} cannot compile C source code" 1>&2; exit 1; } { echo "configure: error: ${CC-cc} cannot compile C source code" 1>&2; exit 1; }
fi fi
grub_cv_prog_objcopy_absolute=yes grub_cv_prog_objcopy_absolute=yes
for link_addr in 2000 8000 7C00; do for link_addr in 2000 8000 7C00; do
if { ac_try='${LD-ld} -N -Ttext $link_addr conftest.o -o conftest.exec'; { (eval echo configure:1329: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then : if { ac_try='${LD-ld} -N -Ttext $link_addr conftest.o -o conftest.exec'; { (eval echo configure:1344: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then :
else else
{ echo "configure: error: ${LD-ld} cannot link at address $link_addr" 1>&2; exit 1; } { echo "configure: error: ${LD-ld} cannot link at address $link_addr" 1>&2; exit 1; }
fi fi
if { ac_try='${OBJCOPY-objcopy} -O binary conftest.exec conftest'; { (eval echo configure:1333: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then : if { ac_try='${OBJCOPY-objcopy} -O binary conftest.exec conftest'; { (eval echo configure:1348: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then :
else else
{ echo "configure: error: ${OBJCOPY-objcopy} cannot create binary files" 1>&2; exit 1; } { echo "configure: error: ${OBJCOPY-objcopy} cannot create binary files" 1>&2; exit 1; }
fi fi
if test ! -f conftest.old || { ac_try='cmp -s conftest.old conftest'; { (eval echo configure:1337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then if test ! -f conftest.old || { ac_try='cmp -s conftest.old conftest'; { (eval echo configure:1352: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
mv -f conftest conftest.old mv -f conftest conftest.old
else else
grub_cv_prog_objcopy_absolute=no grub_cv_prog_objcopy_absolute=no
@ -1350,7 +1365,7 @@ fi
echo $ac_n "checking for .code16 addr32 assembler support""... $ac_c" 1>&6 echo $ac_n "checking for .code16 addr32 assembler support""... $ac_c" 1>&6
echo "configure:1354: checking for .code16 addr32 assembler support" >&5 echo "configure:1369: checking for .code16 addr32 assembler support" >&5
if eval "test \"\${grub_cv_asm_addr32+set}\" = set"; then if eval "test \"\${grub_cv_asm_addr32+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1360,7 +1375,7 @@ l1: addr32
movb %al, l1 movb %al, l1
EOF EOF
if { ac_try='${CC-cc} -c conftest.s'; { (eval echo configure:1364: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.o; then if { ac_try='${CC-cc} -c conftest.s'; { (eval echo configure:1379: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.o; then
grub_cv_asm_addr32=yes grub_cv_asm_addr32=yes
else else
grub_cv_asm_addr32=no grub_cv_asm_addr32=no
@ -1373,10 +1388,9 @@ if test "x$grub_cv_asm_addr32" != xyes; then
{ echo "configure: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" 1>&2; exit 1; } { echo "configure: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" 1>&2; exit 1; }
fi fi
# Check for curses libraries if we are building /sbin/grub. # Check for curses libraries.
if test -n "$sbingrub"; then echo $ac_n "checking for getch in -lncurses""... $ac_c" 1>&6
echo $ac_n "checking for getch in -lncurses""... $ac_c" 1>&6 echo "configure:1394: checking for getch in -lncurses" >&5
echo "configure:1380: checking for getch in -lncurses" >&5
ac_lib_var=`echo ncurses'_'getch | sed 'y%./+-%__p_%'` ac_lib_var=`echo ncurses'_'getch | sed 'y%./+-%__p_%'`
if eval "test \"\${ac_cv_lib_$ac_lib_var+set}\" = set"; then if eval "test \"\${ac_cv_lib_$ac_lib_var+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -1384,7 +1398,7 @@ else
ac_save_LIBS="$LIBS" ac_save_LIBS="$LIBS"
LIBS="-lncurses $LIBS" LIBS="-lncurses $LIBS"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1388 "configure" #line 1402 "configure"
#include "confdefs.h" #include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */ /* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2 /* We use char because int might match the return type of a gcc2
@ -1395,7 +1409,7 @@ int main() {
getch() getch()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes" eval "ac_cv_lib_$ac_lib_var=yes"
else else
@ -1418,7 +1432,7 @@ EOF
else else
echo "$ac_t""no" 1>&6 echo "$ac_t""no" 1>&6
echo $ac_n "checking for getch in -lcurses""... $ac_c" 1>&6 echo $ac_n "checking for getch in -lcurses""... $ac_c" 1>&6
echo "configure:1422: checking for getch in -lcurses" >&5 echo "configure:1436: checking for getch in -lcurses" >&5
ac_lib_var=`echo curses'_'getch | sed 'y%./+-%__p_%'` ac_lib_var=`echo curses'_'getch | sed 'y%./+-%__p_%'`
if eval "test \"\${ac_cv_lib_$ac_lib_var+set}\" = set"; then if eval "test \"\${ac_cv_lib_$ac_lib_var+set}\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -1426,7 +1440,7 @@ else
ac_save_LIBS="$LIBS" ac_save_LIBS="$LIBS"
LIBS="-lcurses $LIBS" LIBS="-lcurses $LIBS"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1430 "configure" #line 1444 "configure"
#include "confdefs.h" #include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */ /* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2 /* We use char because int might match the return type of a gcc2
@ -1437,7 +1451,7 @@ int main() {
getch() getch()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes" eval "ac_cv_lib_$ac_lib_var=yes"
else else
@ -1463,7 +1477,6 @@ fi
fi fi
fi
# Create rules for our shared sources. # Create rules for our shared sources.
SHARED_SRC_RULES=./ssrcrules.mk SHARED_SRC_RULES=./ssrcrules.mk
@ -1663,7 +1676,8 @@ s%@host_alias@%$host_alias%g
s%@host_cpu@%$host_cpu%g s%@host_cpu@%$host_cpu%g
s%@host_vendor@%$host_vendor%g s%@host_vendor@%$host_vendor%g
s%@host_os@%$host_os%g s%@host_os@%$host_os%g
s%@sbingrub@%$sbingrub%g s%@GRUB_MAINT_TRUE@%$GRUB_MAINT_TRUE%g
s%@GRUB_MAINT_FALSE@%$GRUB_MAINT_FALSE%g
s%@build@%$build%g s%@build@%$build%g
s%@build_alias@%$build_alias%g s%@build_alias@%$build_alias%g
s%@build_cpu@%$build_cpu%g s%@build_cpu@%$build_cpu%g

View file

@ -32,11 +32,16 @@ AC_SUBST(host_vendor)
# #
# Options # Options
# #
sbingrub=
AC_ARG_ENABLE(sbin-grub, AC_ARG_ENABLE(maintainer-mode,
[ --enable-sbin-grub build /sbin/grub command-line utility], [ --enable-maintainer-mode
[test "x$enableval" = xno || sbingrub=grub]) enable the maintainer mode],
AC_SUBST(sbingrub) [case "x${enableval}" in
xyes) maintainermode=yes ;;
xno) maintainermode=no ;;
*) AC_MSG_ERROR(invalid value ${enableval} for --enable-maintainer-mode) ;;
esac],[maintainermode=no])
AM_CONDITIONAL(GRUB_MAINT, test "x${maintainermode}" = xyes)
# #
# Programs # Programs
@ -63,13 +68,11 @@ if test "x$grub_cv_asm_addr32" != xyes; then
AC_MSG_ERROR([GRUB requires GAS .code16 addr32 support; upgrade your binutils]) AC_MSG_ERROR([GRUB requires GAS .code16 addr32 support; upgrade your binutils])
fi fi
# Check for curses libraries if we are building /sbin/grub. # Check for curses libraries.
if test -n "$sbingrub"; then AC_CHECK_LIB(ncurses, getch, [LIBS="$LIBS -lncurses"
AC_CHECK_LIB(ncurses, getch, [LIBS="$LIBS -lncurses"
AC_DEFINE(HAVE_LIBCURSES)], AC_DEFINE(HAVE_LIBCURSES)],
[AC_CHECK_LIB(curses, getch, [LIBS="$LIBS -lcurses" [AC_CHECK_LIB(curses, getch, [LIBS="$LIBS -lcurses"
AC_DEFINE(HAVE_LIBCURSES)])]) AC_DEFINE(HAVE_LIBCURSES)])])
fi
# Create rules for our shared sources. # Create rules for our shared sources.
AC_SUBST_FILE(SHARED_SRC_RULES)dnl AC_SUBST_FILE(SHARED_SRC_RULES)dnl

1
debian/Makefile.in vendored
View file

@ -70,7 +70,6 @@ VERSION = @VERSION@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
install_sh = @install_sh@ install_sh = @install_sh@
sbingrub = @sbingrub@
EXTRA_DIST = README.debian changelog control copyright rules EXTRA_DIST = README.debian changelog control copyright rules

View file

@ -1,2 +1,12 @@
info_TEXINFOS = grub.texi multiboot.texi info_TEXINFOS = grub.texi multiboot.texi
EXTRA_DIST = menu.lst man_MANS = grub.8
HELP2MAN = $(srcdir)/help2man
noinst_SCRIPTS = $(HELP2MAN)
EXTRA_DIST = menu.lst $(man_MANS) $(noinst_SCRIPTS)
if GRUB_MAINT
$(srcdir)/grub.8: ../grub/grub $(HELP2MAN)
$(HELP2MAN) --name="the stage2 emulator shell" --section=8 \
--output=$@ $<
endif

View file

@ -70,19 +70,28 @@ VERSION = @VERSION@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
install_sh = @install_sh@ install_sh = @install_sh@
sbingrub = @sbingrub@
info_TEXINFOS = grub.texi multiboot.texi info_TEXINFOS = grub.texi multiboot.texi
EXTRA_DIST = menu.lst man_MANS = grub.8
HELP2MAN = $(srcdir)/help2man
noinst_SCRIPTS = $(HELP2MAN)
EXTRA_DIST = menu.lst $(man_MANS) $(noinst_SCRIPTS)
subdir = docs subdir = docs
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
SCRIPTS = $(noinst_SCRIPTS)
DIST_SOURCES = DIST_SOURCES =
TEXI2DVI = texi2dvi TEXI2DVI = texi2dvi
INFO_DEPS = grub.info multiboot.info INFO_DEPS = grub.info multiboot.info
DVIS = grub.dvi multiboot.dvi DVIS = grub.dvi multiboot.dvi
TEXINFOS = grub.texi multiboot.texi TEXINFOS = grub.texi multiboot.texi
man8dir = $(mandir)/man8
MANS = $(man_MANS)
NROFF = nroff
DIST_COMMON = Makefile.am Makefile.in mdate-sh stamp-vti texinfo.tex \ DIST_COMMON = Makefile.am Makefile.in mdate-sh stamp-vti texinfo.tex \
version.texi version.texi
@ -252,6 +261,47 @@ maintainer-clean-aminfo:
rm -f $$i-[0-9]*; \ rm -f $$i-[0-9]*; \
fi; \ fi; \
done done
install-man8:
$(mkinstalldirs) $(DESTDIR)$(man8dir)
@list='$(man8_MANS)'; \
l2='$(man_MANS)'; for i in $$l2; do \
case "$$i" in \
*.8*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
done
uninstall-man8:
@list='$(man8_MANS)'; \
l2='$(man_MANS)'; for i in $$l2; do \
case "$$i" in \
*.8*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \
rm -f $(DESTDIR)$(man8dir)/$$inst; \
done
install-man: $(MANS)
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-man8
uninstall-man:
@$(NORMAL_UNINSTALL)
$(MAKE) $(AM_MAKEFLAGS) uninstall-man8
tags: TAGS tags: TAGS
TAGS: TAGS:
@ -264,6 +314,7 @@ distdir: $(DISTFILES)
distdir=`cd $(distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \ cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu docs/Makefile && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu docs/Makefile
$(mkinstalldirs) $(distdir)/$(srcdir)
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
@ -286,20 +337,20 @@ installcheck: installcheck-am
install-exec-am: install-exec-am:
install-exec: install-exec-am install-exec: install-exec-am
install-data-am: install-info-am install-data-am: install-info-am install-man
install-data: install-data-am install-data: install-data-am
install-am: all-am install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am install: install-am
uninstall-am: uninstall-info uninstall-am: uninstall-info uninstall-man
uninstall: uninstall-am uninstall: uninstall-am
all-am: Makefile $(INFO_DEPS) all-am: Makefile $(INFO_DEPS) $(SCRIPTS) $(MANS)
all-redirect: all-am all-redirect: all-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
installdirs: installdirs:
$(mkinstalldirs) $(DESTDIR)$(infodir) $(mkinstalldirs) $(DESTDIR)$(infodir) $(DESTDIR)$(mandir)/man8
mostlyclean-generic: mostlyclean-generic:
@ -332,14 +383,19 @@ maintainer-clean: maintainer-clean-am
.PHONY: mostlyclean-vti distclean-vti clean-vti maintainer-clean-vti \ .PHONY: mostlyclean-vti distclean-vti clean-vti maintainer-clean-vti \
install-info-am uninstall-info mostlyclean-aminfo distclean-aminfo \ install-info-am uninstall-info mostlyclean-aminfo distclean-aminfo \
clean-aminfo maintainer-clean-aminfo tags distdir info-am info dvi-am \ clean-aminfo maintainer-clean-aminfo install-man8 uninstall-man8 \
dvi check check-am installcheck-am installcheck install-exec-am \ install-man uninstall-man tags distdir info-am info dvi-am dvi check \
install-exec install-data-am install-data install-am install \ check-am installcheck-am installcheck install-exec-am install-exec \
uninstall-am uninstall all-redirect all-am all install-strip \ install-data-am install-data install-am install uninstall-am uninstall \
installdirs mostlyclean-generic distclean-generic clean-generic \ all-redirect all-am all install-strip installdirs mostlyclean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean
@GRUB_MAINT_TRUE@$(srcdir)/grub.8: ../grub/grub $(HELP2MAN)
@GRUB_MAINT_TRUE@ $(HELP2MAN) --name="the stage2 emulator shell" --section=8 \
@GRUB_MAINT_TRUE@ --output=$@ $<
# Tell versions [3.59,3.63) of GNU make to not export all variables. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

57
docs/grub.8 Normal file
View file

@ -0,0 +1,57 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.010.
.TH GRUB "8" "June 2000" "GNU GRUB 0.5.92" "FSF"
.SH NAME
GRUB \- the stage2 emulator shell
.SH SYNOPSIS
.B GRUB
[\fIOPTION\fR]...
.SH DESCRIPTION
.PP
Enter the GRand Unified Bootloader command shell.
.TP
\fB\-\-batch\fR
turn on batch mode for non-interactive use
.TP
\fB\-\-boot\-drive\fR=\fIDRIVE\fR
specify stage2 boot_drive [default=0x0]
.TP
\fB\-\-config\-file\fR=\fIFILE\fR
specify stage2 config_file [default=/boot/grub/menu.lst]
.TP
\fB\-\-help\fR
display this message and exit
.TP
\fB\-\-hold\fR
wait until a debugger will attach
.TP
\fB\-\-install\-partition\fR=\fIPAR\fR
specify stage2 install_partition [default=0x20000]
.TP
\fB\-\-no\-config\-file\fR
do not use the config file
.TP
\fB\-\-no\-curses\fR
do not use curses
.TP
\fB\-\-read\-only\fR
do not write anything to devices
.TP
\fB\-\-verbose\fR
print verbose messages
.TP
\fB\-\-version\fR
print version information and exit
.SH "REPORTING BUGS"
Report bugs to bug-grub@gnu.org
.SH "SEE ALSO"
The full documentation for
.B GRUB
is maintained as a Texinfo manual. If the
.B info
and
.B GRUB
programs are properly installed at your site, the command
.IP
.B info GRUB
.PP
should give you access to the complete manual.

View file

@ -364,7 +364,7 @@ on the floppy.
If you install GRUB using this method, it will only have access to the If you install GRUB using this method, it will only have access to the
command-line interface, since there is no filesystem in which to find a command-line interface, since there is no filesystem in which to find a
configuration file (FIXME: ref). If you want to use the menu interface, see configuration file. If you want to use the menu interface, see
@ref{Automated install}. @ref{Automated install}.
Under an UNIX-like operating system, such as GNU, use @code{dd} as Under an UNIX-like operating system, such as GNU, use @code{dd} as
@ -427,7 +427,7 @@ place the @file{stage2} (and if desired, your configuration file called
(after booting from the GRUB floppy): (after booting from the GRUB floppy):
@example @example
install= (fd0)+1 (hd0) (hd0,2)/boot/grub/stage2 0x8000 p install= (fd0)+1 (hd0) (hd0,1)/boot/grub/stage2 0x8000 p
@end example @end example
This tells GRUB to grab the first sector of the floppy and use it as the This tells GRUB to grab the first sector of the floppy and use it as the
@ -444,7 +444,7 @@ telling GRUB's stage1 to read from the first hard disk no matter where
the stage1 was loaded from: the stage1 was loaded from:
@example @example
install= (fd0)+1 d (fd0) (hd0,2)/boot/grub/stage2 0x8000 p install= (fd0)+1 d (fd0) (hd0,1)/boot/grub/stage2 0x8000 p
@end example @end example
The @samp{d} option near the beginning is what sets the @emph{forced} The @samp{d} option near the beginning is what sets the @emph{forced}
@ -452,6 +452,26 @@ loading from the disk where the stage2 was installed from. Also, the
@dfn{destination device} is changed to place the finished stage1 on the @dfn{destination device} is changed to place the finished stage1 on the
floppy disk. floppy disk.
@item
@strong{Same as above, but place the stage1.5 in the first cylinder of
the hard disk, and load the stage2 via the stage1.5:} Each of Stage 1.5s
supports only one filesystem, so choose a stage1.5 that supports the
filesystem where stage2 is located. Here it is assumed that the
filesystem is ext2fs.
First, copy @file{e2fs_stage1_5} to the first cylinder after MBR
(@pxref{MBR}):
@example
dd if=e2fs_stage1_5/e2fs_stage1_5 of=/dev/hda bs=512 seek=1
@end example
Second, specify the stage2 argument in the block-list format:
@example
install= (fd0)+1 (hd0) (hd0)1+1 0x2000 p (hd0,1)/boot/grub/stage2
@end example
@item @item
@strong{Installing from an @emph{install directory} to the second hard @strong{Installing from an @emph{install directory} to the second hard
disk:} Here we're loading the stage1 from a file on the first hard disk, disk:} Here we're loading the stage1 from a file on the first hard disk,
@ -460,7 +480,7 @@ hard disk, and setting the stage2's @dfn{configuration file} to
@file{(hd1,a)/grubdir/configfile}: @file{(hd1,a)/grubdir/configfile}:
@example @example
install= (hd0,2)/boot/grub/stage1 (hd1) (hd1,a)/boot/grub/stage2 0x8000 p /grubdir/configfile install= (hd0,1)/boot/grub/stage1 (hd1) (hd1,a)/boot/grub/stage2 0x8000 p /grubdir/configfile
@end example @end example
@end itemize @end itemize
@ -517,7 +537,7 @@ file, used with exactly the same syntax.
@c The list of available keys should be listed in @table, and should be @c The list of available keys should be listed in @table, and should be
@c explained exactly. Current explanation is obscure. @c explained exactly. Current explanation is obscure.
Cursor movement and editing of the text on the line can be done via a Cursor movement and editing of the text on the line can be done via a
subset of the functions available in the BASH (FIXME: ref) shell subset of the functions available in the BASH shell
(@kbd{C-f} forward, @kbd{C-b} backward, @kbd{C-a} beginning of line, (@kbd{C-f} forward, @kbd{C-b} backward, @kbd{C-a} beginning of line,
@kbd{C-e} end of line, @kbd{C-k} delete to end, @kbd{C-u} delete to @kbd{C-e} end of line, @kbd{C-k} delete to end, @kbd{C-u} delete to
beginning; the PC left and right arrow keys, @key{HOME}, @key{DEL}, and beginning; the PC left and right arrow keys, @key{HOME}, @key{DEL}, and

397
docs/help2man Normal file
View file

@ -0,0 +1,397 @@
#!/usr/local/bin/perl -w
# Generate a short man page from --help and --version output.
# Copyright © 1997, 98, 99 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, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Written by Brendan O'Dea <bod@compusol.com.au>
use 5.004;
use strict;
use Getopt::Long;
use POSIX qw(strftime setlocale LC_TIME);
my $this_program = 'help2man';
my $this_version = '1.010';
my $version_info = <<EOT;
$this_program $this_version
Copyright (C) 1997, 98, 99 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.
Written by Brendan O'Dea <bod\@compusol.com.au>
EOT
my $help_info = <<EOT;
`$this_program' generates a man page out of `--help' and `--version' output.
Usage: $this_program [OPTION]... EXECUTABLE
--name=STRING use `STRING' as the description for the NAME paragraph
--include=FILE include material from `FILE'
--opt-include=FILE include material from `FILE' if it exists
--output=FILE send output to `FILE'
--no-info suppress pointer to Texinfo manual
--section=SECTION use `SECTION' as the section for the man page
--help print this help, then exit
--version print $this_program program version number, then exit
EXECUTABLE should accept `--help' and `version' options.
EOT
my ($include, $opt_name, $opt_include, $opt_output, $opt_no_info,
$opt_section);
# Parse options.
GetOptions (
'name=s' => \$opt_name,
'include=s' => \$include,
'opt-include=s' => \$opt_include,
'output=s' => \$opt_output,
'no-info' => \$opt_no_info,
'section=s' => \$opt_section,
help => sub { print $help_info; exit },
version => sub { print $version_info; exit },
) or die $help_info;
die $help_info unless @ARGV == 1;
my %include = ();
my @include = (); # to retain order
# Process include file (if given). Format is:
#
# [section name]
# verbatim text
if ($include or $opt_include)
{
if (open INC, $include || $opt_include)
{
my $sect;
while (<INC>)
{
if (/^\[([^]]+)\]/)
{
$sect = uc $1;
$sect =~ s/^\s+//;
$sect =~ s/\s+$//;
next;
}
# Silently ignore anything before the first
# section--allows for comments and revision info.
next unless $sect;
push @include, $sect unless $include{$sect};
$include{$sect} ||= '';
$include{$sect} .= $_;
}
close INC;
die "$this_program: no valid information found in `$include'\n"
unless %include;
# Compress trailing blank lines.
for (keys %include)
{
$include{$_} =~ s/\n+$//;
$include{$_} .= "\n" unless /^NAME$/;
}
}
else
{
die "$this_program: can't open `$include' ($!)\n" if $include;
}
}
# Turn off localisation of executable's ouput.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
# Turn off localisation of date (for strftime)
setlocale LC_TIME, 'C';
# Grab help and version paragraphs from executable
my @help = split /\n\n+/, `$ARGV[0] --help 2>/dev/null`
or die "$this_program: can't get `--help' info from $ARGV[0]\n";
my @version = split /\n\n+/, `$ARGV[0] --version 2>/dev/null`
or die "$this_program: can't get `--version' info from $ARGV[0]\n";
my $date = strftime "%B %Y", localtime;
(my $program = $ARGV[0]) =~ s!.*/!!;
my $package = $program;
my $version;
# Set the section to 1 by default.
my $section = 1;
$section = $opt_section if $opt_section;
if ($opt_output)
{
unlink $opt_output
or die "$this_program: can't unlink $opt_output ($!)\n"
if -e $opt_output;
open STDOUT, ">$opt_output"
or die "$this_program: can't create $opt_output ($!)\n";
}
# The first line of the --version information is assumed to be in one
# of the following formats:
#
# <version>
# <program> <version>
# {GNU,Free} <program> <version>
# <program> ({GNU,Free} <package>) <version>
# <program> - {GNU,Free} <package> <version>
#
# and seperated from any copyright/author details by a blank line.
$_ = shift @version;
if (/^(\S+)\s+\(((?:GNU|Free)\s+[^)]+)\)\s+(.*)/ or
/^(\S+)\s+-\s*((?:GNU|Free)\s+\S+)\s+(.*)/)
{
$program = $1;
$package = $2;
$version = $3;
}
elsif (/^((?:GNU|Free)\s+)?(\S+)\s+(.*)/)
{
$program = $2;
$package = $1 ? "$1$2" : $2;
$version = $3;
}
else
{
$version = $_;
}
$program =~ s!.*/!!;
# no info for `info' itself
$opt_no_info = 1 if $program eq 'info';
# --name overrides --include contents
$include{NAME} = "$program \\- $opt_name" if $opt_name;
# Default (useless) NAME paragraph
$include{NAME} ||= "$program \\- manual page for $program $version";
# Man pages traditionally have the page title in caps.
my $PROGRAM = uc $program;
# Header.
print <<EOT;
.\\" DO NOT MODIFY THIS FILE! It was generated by $this_program $this_version.
.TH $PROGRAM "$section" "$date" "$package $version" "FSF"
.SH NAME
$include{NAME}
EOT
my $accumulate = 1;
my @description = ();
sub convert_option;
# Output converted --help information.
for (@help)
{
chomp;
if (s/^Usage:\s+\S+\s+(.*)\n?//)
{
# Turn the usage clause into a synopsis.
my $synopsis = '';
do {
my $syn = $1;
$syn =~ s/(([][]|\.\.+)+)/\\fR$1\\fI/g;
$syn =~ s/^/\\fI/ unless $syn =~ s/^\\fR//;
$syn .= '\fR';
$syn =~ s/\\fI(\s*)\\fR/$1/g;
$synopsis .= ".br\n" unless $accumulate;
$synopsis .= ".B $program\n";
$synopsis .= "$syn\n";
$accumulate = 0;
} while s/^(?:Usage|\s*or):\s+\S+\s+(.*)\n?//;
# Include file overrides SYNOPSIS.
print ".SH SYNOPSIS\n", $include{SYNOPSIS} || $synopsis;
# Dump any accumulated description text.
print ".SH DESCRIPTION\n";
print @description;
# Add additional description text from include file.
if ($include{DESCRIPTION})
{
print ".PP\n" unless $include{DESCRIPTION} =~ /^\..P/;
print $include{DESCRIPTION};
}
next unless $_;
}
# Accumulate text if the synopsis has not been produced yet.
if ($accumulate)
{
push @description, ".PP\n" if @description;
push @description, "$_\n";
next;
}
# Convert some standard paragraph names
if (s/^(Options|Examples):\s*\n//)
{
print qq(.SH \U$1\n);
next unless length;
}
# Catch bug report text.
if (/^Report bugs |^Email bug reports to /)
{
print qq(.SH "REPORTING BUGS"\n$_\n);
next;
}
# Special case for tar 1.12: --label=NAME\nPATTERN.
s{(\n[ \t]*)(-V,[ \t]+--label=NAME.*)\n[ \t]+PATTERN[ \t]+}
{$1$2$1\\&...=PATTERN };
# Convert options.
s/((?:^|,)\s+)(-[][\w=-]+|\\&\S+)/$1 . convert_option $2/mge;
# Option subsections have second line indented.
print qq(.SS "$1"\n) if s/^(\S.*)\n(\s)/$2/;
my $ind = 0;
for (split /\n/)
{
# indented paragraph
if (/^\s/)
{
# Join continued lines when indented to the same point as
# text following at least two spaces on the previous line.
if ($ind > 0 and /^ {$ind}\S/)
{
s/^\s+//;
print "$_\n" if $_;
}
else
{
# use the words(s) before two or more spaces for the
# tag
s/^(\s+)//;
$ind = length $1;
if (s/(\s\s+)/\n/)
{
$ind += (length $1) + index $_, "\n";
}
else
{
$ind = 0;
}
print ".TP\n$_\n" if $_;
}
}
# Anything else.
else
{
print ".PP\n" unless $ind < 0;
print "$_\n";
$ind = -1;
}
}
}
# Print any include items other than the ones we have already dealt
# with.
for (@include)
{
print qq(.SH "$_"\n$include{$_})
unless /^(NAME|SYNOPSIS|DESCRIPTION|SEE ALSO)$/;
}
# Refer to the real documentation.
if ($include{'SEE ALSO'} or !$opt_no_info)
{
print qq(.SH "SEE ALSO"\n);
print $include{'SEE ALSO'}, ".PP\n" if $include{'SEE ALSO'};
print <<EOT unless $opt_no_info;
The full documentation for
.B $program
is maintained as a Texinfo manual. If the
.B info
and
.B $program
programs are properly installed at your site, the command
.IP
.B info $program
.PP
should give you access to the complete manual.
EOT
}
# Output converted --version information.
for (@version)
{
chomp;
# Join hyphenated lines.
s/([A-Za-z])-\n */$1/g;
# Convert copyright symbol or (c) to nroff character.
s/Copyright\s+(?:\xa9|\([Cc]\))/Copyright \\(co/g;
# Insert appropriate headings for copyright and author.
if (/^Copyright\s\\/) { print ".SH COPYRIGHT\n" }
elsif (/^Written\s+by/) { print ".SH AUTHOR\n" }
else { print ".PP\n"; }
# Insert line breaks before additional copyright messages and the
# disclaimer.
s/(.)\n(Copyright\s|This is free software)/$1\n.br\n$2/g;
print "$_\n";
}
exit;
# Convert option dashes to \- to stop nroff from hyphenating 'em, and
# embolden. Option arguments get italicised.
sub convert_option
{
my $option = '\fB' . shift;
$option =~ s/-/\\-/g;
unless ($option =~ s/\[=(.*)\]$/\\fR[=\\fI$1\\fR]/)
{
$option =~ s/=(.)/\\fR=\\fI$1/;
$option =~ s/ (.)/ \\fI$1/;
$option .= '\fR';
}
$option;
}

View file

@ -68,7 +68,6 @@ VERSION = @VERSION@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
install_sh = @install_sh@ install_sh = @install_sh@
sbingrub = @sbingrub@
# Stage 1.5 can be installed into the first cylinder after MBR, so the # Stage 1.5 can be installed into the first cylinder after MBR, so the
# limit is (63 - 1) * 512 = 31744. # limit is (63 - 1) * 512 = 31744.

View file

@ -68,7 +68,6 @@ VERSION = @VERSION@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
install_sh = @install_sh@ install_sh = @install_sh@
sbingrub = @sbingrub@
# Stage 1.5 can be installed into the first cylinder after MBR, so the # Stage 1.5 can be installed into the first cylinder after MBR, so the
# limit is (63 - 1) * 512 = 31744. # limit is (63 - 1) * 512 = 31744.

View file

@ -68,7 +68,6 @@ VERSION = @VERSION@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
install_sh = @install_sh@ install_sh = @install_sh@
sbingrub = @sbingrub@
IMPORTANT_SIZE_LIMIT = 7168 IMPORTANT_SIZE_LIMIT = 7168

View file

@ -1,5 +1,4 @@
EXTRA_PROGRAMS = grub sbin_PROGRAMS = grub
sbin_PROGRAMS = $(sbingrub)
CLEANFILES = $(EXTRA_PROGRAMS) CLEANFILES = $(EXTRA_PROGRAMS)
COMPILE = $(CC) -DGRUB_UTIL=1 -fwritable-strings $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) COMPILE = $(CC) -DGRUB_UTIL=1 -fwritable-strings $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)

View file

@ -70,11 +70,9 @@ VERSION = @VERSION@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
install_sh = @install_sh@ install_sh = @install_sh@
sbingrub = @sbingrub@
EXTRA_PROGRAMS = grub sbin_PROGRAMS = grub
sbin_PROGRAMS = $(sbingrub)
CLEANFILES = $(EXTRA_PROGRAMS) CLEANFILES = $(EXTRA_PROGRAMS)
COMPILE = $(CC) -DGRUB_UTIL=1 -fwritable-strings $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) COMPILE = $(CC) -DGRUB_UTIL=1 -fwritable-strings $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)

View file

@ -39,13 +39,14 @@ int grub_stage2 (void);
#include <time.h> #include <time.h>
#include <errno.h> #include <errno.h>
#include <string.h> #include <string.h>
#include <unistd.h>
#ifdef __linux__ #ifdef __linux__
# include <sys/ioctl.h> /* ioctl */ # include <sys/ioctl.h> /* ioctl */
# include <linux/hdreg.h> /* HDIO_GETGEO */ # include <linux/hdreg.h> /* HDIO_GETGEO */
/* FIXME: only include if libc doesn't have large file support. */ /* FIXME: only include if libc doesn't have large file support. */
# include <unistd.h>
# include <linux/unistd.h> /* _llseek */ # include <linux/unistd.h> /* _llseek */
# include <linux/fs.h> /* BLKFLSBUF */
#endif /* __linux__ */ #endif /* __linux__ */
/* Simulated memory sizes. */ /* Simulated memory sizes. */
@ -223,10 +224,16 @@ grub_stage2 (void)
} }
#endif #endif
/* Make sure that actual writing is done. */
sync ();
/* Set our stack, and go for it. */ /* Set our stack, and go for it. */
simstack = (char *) PROTSTACKINIT; simstack = (char *) PROTSTACKINIT;
doit (); doit ();
/* I don't know if this is necessary really. */
sync ();
#ifdef HAVE_LIBCURSES #ifdef HAVE_LIBCURSES
if (use_curses) if (use_curses)
endwin (); endwin ();
@ -235,7 +242,14 @@ grub_stage2 (void)
/* Close off the file descriptors we used. */ /* Close off the file descriptors we used. */
for (i = 0; i < NUM_DISKS; i ++) for (i = 0; i < NUM_DISKS; i ++)
if (disks[i].flags != -1) if (disks[i].flags != -1)
{
#ifdef __linux__
/* In Linux, invalidate the buffer cache. In other OSes, reboot
is one of the solutions... */
ioctl (disks[i].flags, BLKFLSBUF, 0);
#endif
close (disks[i].flags); close (disks[i].flags);
}
/* Release memory. */ /* Release memory. */
for (i = 0; i < NUM_DISKS; i++) for (i = 0; i < NUM_DISKS; i++)

View file

@ -107,6 +107,12 @@ main (int argc, char **argv)
{ {
int c; int c;
int hold = 0; int hold = 0;
/* First of all, call sync so that all in-core data is scheduled to be
actually written to disks. This is very important because GRUB does
not use ordinary stdio interface but raw devices. */
sync ();
program_name = argv[0]; program_name = argv[0];
default_boot_drive = boot_drive; default_boot_drive = boot_drive;
default_install_partition = install_partition; default_install_partition = install_partition;

View file

@ -70,7 +70,6 @@ VERSION = @VERSION@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
install_sh = @install_sh@ install_sh = @install_sh@
sbingrub = @sbingrub@
noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \

View file

@ -68,7 +68,6 @@ VERSION = @VERSION@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
install_sh = @install_sh@ install_sh = @install_sh@
sbingrub = @sbingrub@
pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)

View file

@ -68,7 +68,6 @@ VERSION = @VERSION@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
install_sh = @install_sh@ install_sh = @install_sh@
sbingrub = @sbingrub@
pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)