URL
https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk
Subversion Repositories openrisc_2011-10-31
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/tags/gnu-src/newlib-1.18.0/newlib-1.18.0-or32-1.0rc1/libgloss/doc
- from Rev 207 to Rev 345
- ↔ Reverse comparison
Rev 207 → Rev 345
/configure
0,0 → 1,2766
#! /bin/sh |
# Guess values for system-dependent variables and create Makefiles. |
# Generated by GNU Autoconf 2.61. |
# |
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, |
# 2002, 2003, 2004, 2005, 2006 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=: |
# Zsh 3.x and 4.x performs 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 |
|
|
|
|
# PATH needs CR |
# 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 |
|
# The user is always right. |
if test "${PATH_SEPARATOR+set}" != set; then |
echo "#! /bin/sh" >conf$$.sh |
echo "exit 0" >>conf$$.sh |
chmod +x conf$$.sh |
if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then |
PATH_SEPARATOR=';' |
else |
PATH_SEPARATOR=: |
fi |
rm -f conf$$.sh |
fi |
|
# Support unset when possible. |
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then |
as_unset=unset |
else |
as_unset=false |
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.) |
as_nl=' |
' |
IFS=" "" $as_nl" |
|
# Find who we are. Look in the path if we contain no directory separator. |
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 |
echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 |
{ (exit 1); exit 1; } |
fi |
|
# Work around bugs in pre-3.0 UWIN ksh. |
for as_var in ENV MAIL MAILPATH |
do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var |
done |
PS1='$ ' |
PS2='> ' |
PS4='+ ' |
|
# NLS nuisances. |
for as_var in \ |
LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ |
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ |
LC_TELEPHONE LC_TIME |
do |
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then |
eval $as_var=C; export $as_var |
else |
($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var |
fi |
done |
|
# Required to use basename. |
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 |
|
|
# Name of the executable. |
as_me=`$as_basename -- "$0" || |
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ |
X"$0" : 'X\(//\)$' \| \ |
X"$0" : 'X\(/\)' \| . 2>/dev/null || |
echo X/"$0" | |
sed '/^.*\/\([^/][^/]*\)\/*$/{ |
s//\1/ |
q |
} |
/^X\/\(\/\/\)$/{ |
s//\1/ |
q |
} |
/^X\/\(\/\).*/{ |
s//\1/ |
q |
} |
s/.*/./; q'` |
|
# CDPATH. |
$as_unset CDPATH |
|
|
if test "x$CONFIG_SHELL" = x; then |
if (eval ":") 2>/dev/null; then |
as_have_required=yes |
else |
as_have_required=no |
fi |
|
if test $as_have_required = yes && (eval ": |
(as_func_return () { |
(exit \$1) |
} |
as_func_success () { |
as_func_return 0 |
} |
as_func_failure () { |
as_func_return 1 |
} |
as_func_ret_success () { |
return 0 |
} |
as_func_ret_failure () { |
return 1 |
} |
|
exitcode=0 |
if as_func_success; then |
: |
else |
exitcode=1 |
echo as_func_success failed. |
fi |
|
if as_func_failure; then |
exitcode=1 |
echo as_func_failure succeeded. |
fi |
|
if as_func_ret_success; then |
: |
else |
exitcode=1 |
echo as_func_ret_success failed. |
fi |
|
if as_func_ret_failure; then |
exitcode=1 |
echo as_func_ret_failure succeeded. |
fi |
|
if ( set x; as_func_ret_success y && test x = \"\$1\" ); then |
: |
else |
exitcode=1 |
echo positional parameters were not saved. |
fi |
|
test \$exitcode = 0) || { (exit 1); exit 1; } |
|
( |
as_lineno_1=\$LINENO |
as_lineno_2=\$LINENO |
test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && |
test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } |
") 2> /dev/null; then |
: |
else |
as_candidate_shells= |
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR |
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH |
do |
IFS=$as_save_IFS |
test -z "$as_dir" && as_dir=. |
case $as_dir in |
/*) |
for as_base in sh bash ksh sh5; do |
as_candidate_shells="$as_candidate_shells $as_dir/$as_base" |
done;; |
esac |
done |
IFS=$as_save_IFS |
|
|
for as_shell in $as_candidate_shells $SHELL; do |
# Try only shells that exist, to save several forks. |
if { test -f "$as_shell" || test -f "$as_shell.exe"; } && |
{ ("$as_shell") 2> /dev/null <<\_ASEOF |
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then |
emulate sh |
NULLCMD=: |
# Zsh 3.x and 4.x performs 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 |
|
|
: |
_ASEOF |
}; then |
CONFIG_SHELL=$as_shell |
as_have_required=yes |
if { "$as_shell" 2> /dev/null <<\_ASEOF |
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then |
emulate sh |
NULLCMD=: |
# Zsh 3.x and 4.x performs 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_func_return () { |
(exit $1) |
} |
as_func_success () { |
as_func_return 0 |
} |
as_func_failure () { |
as_func_return 1 |
} |
as_func_ret_success () { |
return 0 |
} |
as_func_ret_failure () { |
return 1 |
} |
|
exitcode=0 |
if as_func_success; then |
: |
else |
exitcode=1 |
echo as_func_success failed. |
fi |
|
if as_func_failure; then |
exitcode=1 |
echo as_func_failure succeeded. |
fi |
|
if as_func_ret_success; then |
: |
else |
exitcode=1 |
echo as_func_ret_success failed. |
fi |
|
if as_func_ret_failure; then |
exitcode=1 |
echo as_func_ret_failure succeeded. |
fi |
|
if ( set x; as_func_ret_success y && test x = "$1" ); then |
: |
else |
exitcode=1 |
echo positional parameters were not saved. |
fi |
|
test $exitcode = 0) || { (exit 1); exit 1; } |
|
( |
as_lineno_1=$LINENO |
as_lineno_2=$LINENO |
test "x$as_lineno_1" != "x$as_lineno_2" && |
test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } |
|
_ASEOF |
}; then |
break |
fi |
|
fi |
|
done |
|
if test "x$CONFIG_SHELL" != x; then |
for as_var in BASH_ENV ENV |
do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var |
done |
export CONFIG_SHELL |
exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} |
fi |
|
|
if test $as_have_required = no; then |
echo This script requires a shell more modern than all the |
echo shells that I found on your system. Please install a |
echo modern shell, or manually run the script under such a |
echo shell if you do have one. |
{ (exit 1); exit 1; } |
fi |
|
|
fi |
|
fi |
|
|
|
(eval "as_func_return () { |
(exit \$1) |
} |
as_func_success () { |
as_func_return 0 |
} |
as_func_failure () { |
as_func_return 1 |
} |
as_func_ret_success () { |
return 0 |
} |
as_func_ret_failure () { |
return 1 |
} |
|
exitcode=0 |
if as_func_success; then |
: |
else |
exitcode=1 |
echo as_func_success failed. |
fi |
|
if as_func_failure; then |
exitcode=1 |
echo as_func_failure succeeded. |
fi |
|
if as_func_ret_success; then |
: |
else |
exitcode=1 |
echo as_func_ret_success failed. |
fi |
|
if as_func_ret_failure; then |
exitcode=1 |
echo as_func_ret_failure succeeded. |
fi |
|
if ( set x; as_func_ret_success y && test x = \"\$1\" ); then |
: |
else |
exitcode=1 |
echo positional parameters were not saved. |
fi |
|
test \$exitcode = 0") || { |
echo No shell found that supports shell functions. |
echo Please tell autoconf@gnu.org about your system, |
echo including any error possibly output before this |
echo message |
} |
|
|
|
as_lineno_1=$LINENO |
as_lineno_2=$LINENO |
test "x$as_lineno_1" != "x$as_lineno_2" && |
test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { |
|
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO |
# uniformly replaced by the line number. The first 'sed' inserts a |
# line-number line after each line using $LINENO; the second 'sed' |
# does the real work. The second script uses 'N' to pair each |
# line-number line with the line containing $LINENO, and appends |
# trailing '-' during substitution so that $LINENO is not a special |
# case at line end. |
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the |
# scripts with optimization help from Paolo Bonzini. 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" || |
{ echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 |
{ (exit 1); exit 1; }; } |
|
# 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 |
} |
|
|
if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then |
as_dirname=dirname |
else |
as_dirname=false |
fi |
|
ECHO_C= ECHO_N= ECHO_T= |
case `echo -n x` in |
-n*) |
case `echo 'x\c'` in |
*c*) ECHO_T=' ';; # ECHO_T is single tab character. |
*) ECHO_C='\c';; |
esac;; |
*) |
ECHO_N='-n';; |
esac |
|
if expr a : '\(a\)' >/dev/null 2>&1 && |
test "X`expr 00001 : '.*\(...\)'`" = X001; then |
as_expr=expr |
else |
as_expr=false |
fi |
|
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 |
fi |
echo >conf$$.file |
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 -p'. |
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || |
as_ln_s='cp -p' |
elif ln conf$$.file conf$$ 2>/dev/null; then |
as_ln_s=ln |
else |
as_ln_s='cp -p' |
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=: |
else |
test -d ./-p && rmdir ./-p |
as_mkdir_p=false |
fi |
|
if test -x / >/dev/null 2>&1; then |
as_test_x='test -x' |
else |
if ls -dL / >/dev/null 2>&1; then |
as_ls_L_option=L |
else |
as_ls_L_option= |
fi |
as_test_x=' |
eval sh -c '\'' |
if test -d "$1"; then |
test -d "$1/."; |
else |
case $1 in |
-*)set "./$1";; |
esac; |
case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in |
???[sx]*):;;*)false;;esac;fi |
'\'' sh |
' |
fi |
as_executable_p=$as_test_x |
|
# 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 7<&0 </dev/null 6>&1 |
|
# Name of the host. |
# hostname on some systems (SVR3.2, 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= |
SHELL=${CONFIG_SHELL-/bin/sh} |
|
# Identity of this package. |
PACKAGE_NAME= |
PACKAGE_TARNAME= |
PACKAGE_VERSION= |
PACKAGE_STRING= |
PACKAGE_BUGREPORT= |
|
ac_unique_file="porting.texi" |
ac_subst_vars='SHELL |
PATH_SEPARATOR |
PACKAGE_NAME |
PACKAGE_TARNAME |
PACKAGE_VERSION |
PACKAGE_STRING |
PACKAGE_BUGREPORT |
exec_prefix |
prefix |
program_transform_name |
bindir |
sbindir |
libexecdir |
datarootdir |
datadir |
sysconfdir |
sharedstatedir |
localstatedir |
includedir |
oldincludedir |
docdir |
infodir |
htmldir |
dvidir |
pdfdir |
psdir |
libdir |
localedir |
mandir |
DEFS |
ECHO_C |
ECHO_N |
ECHO_T |
LIBS |
build_alias |
host_alias |
target_alias |
INSTALL_PROGRAM |
INSTALL_SCRIPT |
INSTALL_DATA |
LIBOBJS |
LTLIBOBJS' |
ac_subst_files='' |
ac_precious_vars='build_alias |
host_alias |
target_alias' |
|
|
# Initialize some variables set by options. |
ac_init_help= |
ac_init_version=false |
# 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' |
includedir='${prefix}/include' |
oldincludedir='/usr/include' |
docdir='${datarootdir}/doc/${PACKAGE}' |
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=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_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` |
# Reject names that are not valid shell variable names. |
expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && |
{ echo "$as_me: error: invalid feature name: $ac_feature" >&2 |
{ (exit 1); exit 1; }; } |
ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` |
eval enable_$ac_feature=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_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` |
# Reject names that are not valid shell variable names. |
expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && |
{ echo "$as_me: error: invalid feature name: $ac_feature" >&2 |
{ (exit 1); exit 1; }; } |
ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` |
eval enable_$ac_feature=\$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 ;; |
|
-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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` |
# Reject names that are not valid shell variable names. |
expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && |
{ echo "$as_me: error: invalid package name: $ac_package" >&2 |
{ (exit 1); exit 1; }; } |
ac_package=`echo $ac_package | sed 's/[-.]/_/g'` |
eval with_$ac_package=\$ac_optarg ;; |
|
-without-* | --without-*) |
ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` |
# Reject names that are not valid shell variable names. |
expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && |
{ echo "$as_me: error: invalid package name: $ac_package" >&2 |
{ (exit 1); exit 1; }; } |
ac_package=`echo $ac_package | sed 's/[-.]/_/g'` |
eval with_$ac_package=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 ;; |
|
-*) { echo "$as_me: error: unrecognized option: $ac_option |
Try \`$0 --help' for more information." >&2 |
{ (exit 1); exit 1; }; } |
;; |
|
*=*) |
ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` |
# Reject names that are not valid shell variable names. |
expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && |
{ echo "$as_me: error: invalid variable name: $ac_envvar" >&2 |
{ (exit 1); exit 1; }; } |
eval $ac_envvar=\$ac_optarg |
export $ac_envvar ;; |
|
*) |
# FIXME: should be removed in autoconf 3.0. |
echo "$as_me: WARNING: you should use --build, --host, --target" >&2 |
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && |
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'` |
{ echo "$as_me: error: missing argument to $ac_option" >&2 |
{ (exit 1); exit 1; }; } |
fi |
|
# Be sure to have absolute directory names. |
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 |
do |
eval ac_val=\$$ac_var |
case $ac_val in |
[\\/$]* | ?:[\\/]* ) continue;; |
NONE | '' ) case $ac_var in *prefix ) continue;; esac;; |
esac |
{ echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 |
{ (exit 1); exit 1; }; } |
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 |
echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. |
If a cross compiler is detected then cross compile mode will be used." >&2 |
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 .` || |
{ echo "$as_me: error: Working directory cannot be determined" >&2 |
{ (exit 1); exit 1; }; } |
test "X$ac_ls_di" = "X$ac_pwd_ls_di" || |
{ echo "$as_me: error: pwd does not report name of working directory" >&2 |
{ (exit 1); exit 1; }; } |
|
|
# 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 -- "$0" || |
$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ |
X"$0" : 'X\(//\)[^/]' \| \ |
X"$0" : 'X\(//\)$' \| \ |
X"$0" : 'X\(/\)' \| . 2>/dev/null || |
echo X"$0" | |
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 .." |
{ echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 |
{ (exit 1); exit 1; }; } |
fi |
ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" |
ac_abs_confdir=`( |
cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 |
{ (exit 1); exit 1; }; } |
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 this package 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] |
--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/PACKAGE] |
--htmldir=DIR html documentation [DOCDIR] |
--dvidir=DIR dvi documentation [DOCDIR] |
--pdfdir=DIR pdf documentation [DOCDIR] |
--psdir=DIR ps documentation [DOCDIR] |
_ACEOF |
|
cat <<\_ACEOF |
_ACEOF |
fi |
|
if test -n "$ac_init_help"; then |
|
cat <<\_ACEOF |
|
_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" || continue |
ac_builddir=. |
|
case "$ac_dir" in |
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; |
*) |
ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` |
# A ".." for each directory in $ac_dir_suffix. |
ac_top_builddir_sub=`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 |
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 |
configure |
generated by GNU Autoconf 2.61 |
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, |
2002, 2003, 2004, 2005, 2006 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 |
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 $as_me, which was |
generated by GNU Autoconf 2.61. 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=. |
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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; |
esac |
case $ac_pass in |
1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; |
2) |
ac_configure_args1="$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 |
ac_configure_args="$ac_configure_args '$ac_arg'" |
;; |
esac |
done |
done |
$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } |
$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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 |
|
cat <<\_ASBOX |
## ---------------- ## |
## Cache variables. ## |
## ---------------- ## |
_ASBOX |
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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 |
echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; |
esac |
case $ac_var in #( |
_ | IFS | as_nl) ;; #( |
*) $as_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 |
|
cat <<\_ASBOX |
## ----------------- ## |
## Output variables. ## |
## ----------------- ## |
_ASBOX |
echo |
for ac_var in $ac_subst_vars |
do |
eval ac_val=\$$ac_var |
case $ac_val in |
*\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; |
esac |
echo "$ac_var='\''$ac_val'\''" |
done | sort |
echo |
|
if test -n "$ac_subst_files"; then |
cat <<\_ASBOX |
## ------------------- ## |
## File substitutions. ## |
## ------------------- ## |
_ASBOX |
echo |
for ac_var in $ac_subst_files |
do |
eval ac_val=\$$ac_var |
case $ac_val in |
*\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; |
esac |
echo "$ac_var='\''$ac_val'\''" |
done | sort |
echo |
fi |
|
if test -s confdefs.h; then |
cat <<\_ASBOX |
## ----------- ## |
## confdefs.h. ## |
## ----------- ## |
_ASBOX |
echo |
cat confdefs.h |
echo |
fi |
test "$ac_signal" != 0 && |
echo "$as_me: caught signal $ac_signal" |
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'; { (exit 1); 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 |
|
# 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 |
|
|
# Let the site file select an alternate cache file if it wants to. |
# Prefer explicitly selected file to automatically selected ones. |
if test -n "$CONFIG_SITE"; then |
set x "$CONFIG_SITE" |
elif test "x$prefix" != xNONE; then |
set x "$prefix/share/config.site" "$prefix/etc/config.site" |
else |
set x "$ac_default_prefix/share/config.site" \ |
"$ac_default_prefix/etc/config.site" |
fi |
shift |
for ac_site_file |
do |
if test -r "$ac_site_file"; then |
{ echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 |
echo "$as_me: loading site script $ac_site_file" >&6;} |
sed 's/^/| /' "$ac_site_file" >&5 |
. "$ac_site_file" |
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. |
if test -f "$cache_file"; then |
{ echo "$as_me:$LINENO: loading cache $cache_file" >&5 |
echo "$as_me: loading cache $cache_file" >&6;} |
case $cache_file in |
[\\/]* | ?:[\\/]* ) . "$cache_file";; |
*) . "./$cache_file";; |
esac |
fi |
else |
{ echo "$as_me:$LINENO: creating cache $cache_file" >&5 |
echo "$as_me: creating cache $cache_file" >&6;} |
>$cache_file |
fi |
|
# 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,) |
{ echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 |
echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} |
ac_cache_corrupted=: ;; |
,set) |
{ echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 |
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 |
{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 |
echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} |
{ echo "$as_me:$LINENO: former value: $ac_old_val" >&5 |
echo "$as_me: former value: $ac_old_val" >&2;} |
{ echo "$as_me:$LINENO: current value: $ac_new_val" >&5 |
echo "$as_me: current value: $ac_new_val" >&2;} |
ac_cache_corrupted=: |
fi;; |
esac |
# Pass precious variables to config.status. |
if test "$ac_new_set" = set; then |
case $ac_new_val in |
*\'*) ac_arg=$ac_var=`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. |
*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; |
esac |
fi |
done |
if $ac_cache_corrupted; then |
{ echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 |
echo "$as_me: error: changes in the environment can compromise the build" >&2;} |
{ { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 |
echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} |
{ (exit 1); exit 1; }; } |
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 "$srcdir" = "." ; then |
mdir=`echo "${with_multisubdir}/" \ |
| sed -e 's,\([^/][^/]*\),..,g' -e 's,^/$,,'` |
ac_aux_dir= |
for ac_dir in ${mdir}../../.. "$srcdir"/${mdir}../../..; 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 |
{ { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ${mdir}../../.. \"$srcdir\"/${mdir}../../.." >&5 |
echo "$as_me: error: cannot find install-sh or install.sh in ${mdir}../../.. \"$srcdir\"/${mdir}../../.." >&2;} |
{ (exit 1); exit 1; }; } |
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. |
|
|
else |
ac_aux_dir= |
for ac_dir in ${srcdir}/../.. "$srcdir"/${srcdir}/../..; 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 |
{ { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ${srcdir}/../.. \"$srcdir\"/${srcdir}/../.." >&5 |
echo "$as_me: error: cannot find install-sh or install.sh in ${srcdir}/../.. \"$srcdir\"/${srcdir}/../.." >&2;} |
{ (exit 1); exit 1; }; } |
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. |
|
|
fi |
|
# 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. |
{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 |
echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } |
if test -z "$INSTALL"; then |
if test "${ac_cv_path_install+set}" = set; then |
echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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 |
ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" |
break 3 |
fi |
fi |
done |
done |
;; |
esac |
done |
IFS=$as_save_IFS |
|
|
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 |
{ echo "$as_me:$LINENO: result: $INSTALL" >&5 |
echo "${ECHO_T}$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' |
|
|
ac_config_files="$ac_config_files Makefile" |
|
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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 |
echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; |
esac |
case $ac_var in #( |
_ | IFS | as_nl) ;; #( |
*) $as_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 |
test "x$cache_file" != "x/dev/null" && |
{ echo "$as_me:$LINENO: updating cache $cache_file" >&5 |
echo "$as_me: updating cache $cache_file" >&6;} |
cat confcache >$cache_file |
else |
{ echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 |
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}' |
|
# Transform confdefs.h into DEFS. |
# Protect against shell expansion while executing Makefile rules. |
# Protect against Makefile macro expansion. |
# |
# If the first sed substitution is executed (which looks for macros that |
# take arguments), then branch to the quote section. Otherwise, |
# look for a macro that doesn't take arguments. |
ac_script=' |
t clear |
:clear |
s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g |
t quote |
s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g |
t quote |
b any |
:quote |
s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g |
s/\[/\\&/g |
s/\]/\\&/g |
s/\$/$$/g |
H |
:any |
${ |
g |
s/^\n// |
s/\n/ /g |
p |
} |
' |
DEFS=`sed -n "$ac_script" confdefs.h` |
|
|
ac_libobjs= |
ac_ltlibobjs= |
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=`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. |
ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" |
ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' |
done |
LIBOBJS=$ac_libobjs |
|
LTLIBOBJS=$ac_ltlibobjs |
|
|
|
: ${CONFIG_STATUS=./config.status} |
ac_clean_files_save=$ac_clean_files |
ac_clean_files="$ac_clean_files $CONFIG_STATUS" |
{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 |
echo "$as_me: creating $CONFIG_STATUS" >&6;} |
cat >$CONFIG_STATUS <<_ACEOF |
#! $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} |
_ACEOF |
|
cat >>$CONFIG_STATUS <<\_ACEOF |
## --------------------- ## |
## 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=: |
# Zsh 3.x and 4.x performs 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 |
|
|
|
|
# PATH needs CR |
# 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 |
|
# The user is always right. |
if test "${PATH_SEPARATOR+set}" != set; then |
echo "#! /bin/sh" >conf$$.sh |
echo "exit 0" >>conf$$.sh |
chmod +x conf$$.sh |
if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then |
PATH_SEPARATOR=';' |
else |
PATH_SEPARATOR=: |
fi |
rm -f conf$$.sh |
fi |
|
# Support unset when possible. |
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then |
as_unset=unset |
else |
as_unset=false |
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.) |
as_nl=' |
' |
IFS=" "" $as_nl" |
|
# Find who we are. Look in the path if we contain no directory separator. |
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 |
echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 |
{ (exit 1); exit 1; } |
fi |
|
# Work around bugs in pre-3.0 UWIN ksh. |
for as_var in ENV MAIL MAILPATH |
do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var |
done |
PS1='$ ' |
PS2='> ' |
PS4='+ ' |
|
# NLS nuisances. |
for as_var in \ |
LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ |
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ |
LC_TELEPHONE LC_TIME |
do |
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then |
eval $as_var=C; export $as_var |
else |
($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var |
fi |
done |
|
# Required to use basename. |
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 |
|
|
# Name of the executable. |
as_me=`$as_basename -- "$0" || |
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ |
X"$0" : 'X\(//\)$' \| \ |
X"$0" : 'X\(/\)' \| . 2>/dev/null || |
echo X/"$0" | |
sed '/^.*\/\([^/][^/]*\)\/*$/{ |
s//\1/ |
q |
} |
/^X\/\(\/\/\)$/{ |
s//\1/ |
q |
} |
/^X\/\(\/\).*/{ |
s//\1/ |
q |
} |
s/.*/./; q'` |
|
# CDPATH. |
$as_unset CDPATH |
|
|
|
as_lineno_1=$LINENO |
as_lineno_2=$LINENO |
test "x$as_lineno_1" != "x$as_lineno_2" && |
test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { |
|
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO |
# uniformly replaced by the line number. The first 'sed' inserts a |
# line-number line after each line using $LINENO; the second 'sed' |
# does the real work. The second script uses 'N' to pair each |
# line-number line with the line containing $LINENO, and appends |
# trailing '-' during substitution so that $LINENO is not a special |
# case at line end. |
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the |
# scripts with optimization help from Paolo Bonzini. 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" || |
{ echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 |
{ (exit 1); exit 1; }; } |
|
# 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 |
} |
|
|
if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then |
as_dirname=dirname |
else |
as_dirname=false |
fi |
|
ECHO_C= ECHO_N= ECHO_T= |
case `echo -n x` in |
-n*) |
case `echo 'x\c'` in |
*c*) ECHO_T=' ';; # ECHO_T is single tab character. |
*) ECHO_C='\c';; |
esac;; |
*) |
ECHO_N='-n';; |
esac |
|
if expr a : '\(a\)' >/dev/null 2>&1 && |
test "X`expr 00001 : '.*\(...\)'`" = X001; then |
as_expr=expr |
else |
as_expr=false |
fi |
|
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 |
fi |
echo >conf$$.file |
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 -p'. |
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || |
as_ln_s='cp -p' |
elif ln conf$$.file conf$$ 2>/dev/null; then |
as_ln_s=ln |
else |
as_ln_s='cp -p' |
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=: |
else |
test -d ./-p && rmdir ./-p |
as_mkdir_p=false |
fi |
|
if test -x / >/dev/null 2>&1; then |
as_test_x='test -x' |
else |
if ls -dL / >/dev/null 2>&1; then |
as_ls_L_option=L |
else |
as_ls_L_option= |
fi |
as_test_x=' |
eval sh -c '\'' |
if test -d "$1"; then |
test -d "$1/."; |
else |
case $1 in |
-*)set "./$1";; |
esac; |
case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in |
???[sx]*):;;*)false;;esac;fi |
'\'' sh |
' |
fi |
as_executable_p=$as_test_x |
|
# 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 |
|
# 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 $as_me, which was |
generated by GNU Autoconf 2.61. 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 |
|
cat >>$CONFIG_STATUS <<_ACEOF |
# Files that config.status was made for. |
config_files="$ac_config_files" |
|
_ACEOF |
|
cat >>$CONFIG_STATUS <<\_ACEOF |
ac_cs_usage="\ |
\`$as_me' instantiates files from templates according to the |
current configuration. |
|
Usage: $0 [OPTIONS] [FILE]... |
|
-h, --help print this help, then exit |
-V, --version print version number and configuration settings, then exit |
-q, --quiet 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 |
|
Configuration files: |
$config_files |
|
Report bugs to <bug-autoconf@gnu.org>." |
|
_ACEOF |
cat >>$CONFIG_STATUS <<_ACEOF |
ac_cs_version="\\ |
config.status |
configured by $0, generated by GNU Autoconf 2.61, |
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" |
|
Copyright (C) 2006 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' |
_ACEOF |
|
cat >>$CONFIG_STATUS <<\_ACEOF |
# If no file are specified by the user, then we need to provide default |
# value. By we need to know if files were specified by the user. |
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=$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 ) |
echo "$ac_cs_version"; exit ;; |
--debug | --debu | --deb | --de | --d | -d ) |
debug=: ;; |
--file | --fil | --fi | --f ) |
$ac_shift |
CONFIG_FILES="$CONFIG_FILES $ac_optarg" |
ac_need_defaults=false;; |
--he | --h | --help | --hel | -h ) |
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. |
-*) { echo "$as_me: error: unrecognized option: $1 |
Try \`$0 --help' for more information." >&2 |
{ (exit 1); exit 1; }; } ;; |
|
*) ac_config_targets="$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 |
if \$ac_cs_recheck; then |
echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 |
CONFIG_SHELL=$SHELL |
export CONFIG_SHELL |
exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion |
fi |
|
_ACEOF |
cat >>$CONFIG_STATUS <<\_ACEOF |
exec 5>>config.log |
{ |
echo |
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX |
## Running $as_me. ## |
_ASBOX |
echo "$ac_log" |
} >&5 |
|
_ACEOF |
cat >>$CONFIG_STATUS <<_ACEOF |
_ACEOF |
|
cat >>$CONFIG_STATUS <<\_ACEOF |
|
# Handling of arguments. |
for ac_config_target in $ac_config_targets |
do |
case $ac_config_target in |
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; |
|
*) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 |
echo "$as_me: error: invalid argument: $ac_config_target" >&2;} |
{ (exit 1); exit 1; }; };; |
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 |
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= |
trap 'exit_status=$? |
{ test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status |
' 0 |
trap '{ (exit 1); exit 1; }' 1 2 13 15 |
} |
# Create a (secure) tmp directory for tmp files. |
|
{ |
tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && |
test -n "$tmp" && test -d "$tmp" |
} || |
{ |
tmp=./conf$$-$RANDOM |
(umask 077 && mkdir "$tmp") |
} || |
{ |
echo "$me: cannot create a temporary directory in ." >&2 |
{ (exit 1); exit 1; } |
} |
|
# |
# Set up the sed scripts for CONFIG_FILES section. |
# |
|
# No need to generate the scripts if there are no CONFIG_FILES. |
# This happens for instance when ./config.status config.h |
if test -n "$CONFIG_FILES"; then |
|
_ACEOF |
|
|
|
ac_delim='%!_!# ' |
for ac_last_try in false false false false false :; do |
cat >conf$$subs.sed <<_ACEOF |
SHELL!$SHELL$ac_delim |
PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim |
PACKAGE_NAME!$PACKAGE_NAME$ac_delim |
PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim |
PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim |
PACKAGE_STRING!$PACKAGE_STRING$ac_delim |
PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim |
exec_prefix!$exec_prefix$ac_delim |
prefix!$prefix$ac_delim |
program_transform_name!$program_transform_name$ac_delim |
bindir!$bindir$ac_delim |
sbindir!$sbindir$ac_delim |
libexecdir!$libexecdir$ac_delim |
datarootdir!$datarootdir$ac_delim |
datadir!$datadir$ac_delim |
sysconfdir!$sysconfdir$ac_delim |
sharedstatedir!$sharedstatedir$ac_delim |
localstatedir!$localstatedir$ac_delim |
includedir!$includedir$ac_delim |
oldincludedir!$oldincludedir$ac_delim |
docdir!$docdir$ac_delim |
infodir!$infodir$ac_delim |
htmldir!$htmldir$ac_delim |
dvidir!$dvidir$ac_delim |
pdfdir!$pdfdir$ac_delim |
psdir!$psdir$ac_delim |
libdir!$libdir$ac_delim |
localedir!$localedir$ac_delim |
mandir!$mandir$ac_delim |
DEFS!$DEFS$ac_delim |
ECHO_C!$ECHO_C$ac_delim |
ECHO_N!$ECHO_N$ac_delim |
ECHO_T!$ECHO_T$ac_delim |
LIBS!$LIBS$ac_delim |
build_alias!$build_alias$ac_delim |
host_alias!$host_alias$ac_delim |
target_alias!$target_alias$ac_delim |
INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim |
INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim |
INSTALL_DATA!$INSTALL_DATA$ac_delim |
LIBOBJS!$LIBOBJS$ac_delim |
LTLIBOBJS!$LTLIBOBJS$ac_delim |
_ACEOF |
|
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 42; then |
break |
elif $ac_last_try; then |
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 |
echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} |
{ (exit 1); exit 1; }; } |
else |
ac_delim="$ac_delim!$ac_delim _$ac_delim!! " |
fi |
done |
|
ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` |
if test -n "$ac_eof"; then |
ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` |
ac_eof=`expr $ac_eof + 1` |
fi |
|
cat >>$CONFIG_STATUS <<_ACEOF |
cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof |
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end |
_ACEOF |
sed ' |
s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g |
s/^/s,@/; s/!/@,|#_!!_#|/ |
:n |
t n |
s/'"$ac_delim"'$/,g/; t |
s/$/\\/; p |
N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n |
' >>$CONFIG_STATUS <conf$$subs.sed |
rm -f conf$$subs.sed |
cat >>$CONFIG_STATUS <<_ACEOF |
:end |
s/|#_!!_#|//g |
CEOF$ac_eof |
_ACEOF |
|
|
# VPATH may cause trouble with some makes, so we remove $(srcdir), |
# ${srcdir} and @srcdir@ 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[ ]*=/{ |
s/:*\$(srcdir):*/:/ |
s/:*\${srcdir}:*/:/ |
s/:*@srcdir@:*/:/ |
s/^\([^=]*=[ ]*\):*/\1/ |
s/:*$// |
s/^[^=]*=[ ]*$// |
}' |
fi |
|
cat >>$CONFIG_STATUS <<\_ACEOF |
fi # test -n "$CONFIG_FILES" |
|
|
for ac_tag in :F $CONFIG_FILES |
do |
case $ac_tag in |
:[FHLC]) ac_mode=$ac_tag; continue;; |
esac |
case $ac_mode$ac_tag in |
:[FHL]*:*);; |
:L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 |
echo "$as_me: error: Invalid tag $ac_tag." >&2;} |
{ (exit 1); exit 1; }; };; |
:[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="$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 || |
{ { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 |
echo "$as_me: error: cannot find input file: $ac_f" >&2;} |
{ (exit 1); exit 1; }; };; |
esac |
ac_file_inputs="$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 "`IFS=: |
echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." |
if test x"$ac_file" != x-; then |
configure_input="$ac_file. $configure_input" |
{ echo "$as_me:$LINENO: creating $ac_file" >&5 |
echo "$as_me: creating $ac_file" >&6;} |
fi |
|
case $ac_tag in |
*:-:* | *:-) cat >"$tmp/stdin";; |
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 || |
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" |
case $as_dir in #( |
-*) as_dir=./$as_dir;; |
esac |
test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { |
as_dirs= |
while :; do |
case $as_dir in #( |
*\'*) as_qdir=`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 || |
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" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 |
echo "$as_me: error: cannot create directory $as_dir" >&2;} |
{ (exit 1); exit 1; }; }; } |
ac_builddir=. |
|
case "$ac_dir" in |
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; |
*) |
ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` |
# A ".." for each directory in $ac_dir_suffix. |
ac_top_builddir_sub=`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 |
_ACEOF |
|
cat >>$CONFIG_STATUS <<\_ACEOF |
# 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= |
|
case `sed -n '/datarootdir/ { |
p |
q |
} |
/@datadir@/p |
/@docdir@/p |
/@infodir@/p |
/@localedir@/p |
/@mandir@/p |
' $ac_file_inputs` in |
*datarootdir*) ac_datarootdir_seen=yes;; |
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) |
{ echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 |
echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} |
_ACEOF |
cat >>$CONFIG_STATUS <<_ACEOF |
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 |
sed "$ac_vpsub |
$extrasub |
_ACEOF |
cat >>$CONFIG_STATUS <<\_ACEOF |
:t |
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b |
s&@configure_input@&$configure_input&;t t |
s&@top_builddir@&$ac_top_builddir_sub&;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 |
$ac_datarootdir_hack |
" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out |
|
test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && |
{ ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && |
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && |
{ echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' |
which seems to be undefined. Please make sure it is defined." >&5 |
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 "$tmp/stdin" |
case $ac_file in |
-) cat "$tmp/out"; rm -f "$tmp/out";; |
*) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; |
esac |
;; |
|
|
|
esac |
|
done # for ac_tag |
|
|
{ (exit 0); exit 0; } |
_ACEOF |
chmod +x $CONFIG_STATUS |
ac_clean_files=$ac_clean_files_save |
|
|
# 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 || { (exit 1); exit 1; } |
fi |
|
configure
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: Makefile.in
===================================================================
--- Makefile.in (nonexistent)
+++ Makefile.in (revision 345)
@@ -0,0 +1,159 @@
+# Copyright (c) 1995, 1996 Cygnus Support
+#
+# The authors hereby grant permission to use, copy, modify, distribute,
+# and license this software and its documentation for any purpose, provided
+# that existing copyright notices are retained in all copies and that this
+# notice is included verbatim in any distributions. No written agreement,
+# license, or royalty fee is required for any of the authorized uses.
+# Modifications to this software may be copyrighted by their authors
+# and need not follow the licensing terms described here, provided that
+# the new terms are clearly indicated on the first page of each file where
+# they apply.
+#
+
+DESTDIR =
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+
+mandir = @mandir@
+man1dir = $(mandir)/man1
+infodir = @infodir@
+
+MAKEINFO = makeinfo
+TEXI2DVI = TEXINPUTS=$(TEXIDIR):$(srcdir):$$TEXINPUTS texi2dvi
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+
+# Where to find texinfo.tex to format docn with TeX
+TEXIDIR = $(srcdir)/../../texinfo
+
+MANPAGES =
+
+all:
+
+info: porting.info
+
+html: porting.html
+
+dvi: porting.dvi
+
+pdf: porting.pdf
+
+ps: porting.ps
+
+doc: info dvi
+
+porting: porting.dvi porting.info
+
+######################################################################
+# DOCUMENTATION TARGETS
+# TeX output
+porting.dvi: $(srcdir)/porting.texi $(srcdir)/porting.texi
+ $(TEXI2DVI) $(srcdir)/porting.texi
+
+porting.pdf: $(srcdir)/porting.texi $(srcdir)/porting.texi
+ $(TEXI2DVI) --pdf $(srcdir)/porting.texi
+
+# info file for online browsing
+porting.info: $(srcdir)/porting.texi $(srcdir)/porting.texi
+ $(MAKEINFO) -I $(srcdir) -o porting.info $(srcdir)/porting.texi
+
+porting.html: $(srcdir)/porting.texi $(srcdir)/porting.texi
+ $(MAKEINFO) --html -I $(srcdir) -o porting.html $(srcdir)/porting.texi
+
+porting.ps: porting.dvi
+ dvips -f porting.dvi > porting.ps
+
+# different targets for -ms, -mm, -me
+# Try to use a recent texi2roff. v2 was put on prep in jan91.
+# If you want an index, see texi2roff doc for postprocessing
+# and add -i to texi2roff invocations below.
+# Workarounds for texi2roff-2 (probably fixed in later texi2roff's, delete
+# correspondint -e lines when later texi2roff's are current)
+# + @ifinfo's deleted explicitly due to texi2roff-2 bug w nested constructs.
+# + @c's deleted explicitly because texi2roff sees texinfo commands in them
+# + @ (that's at-BLANK) not recognized by texi2roff, turned into blank
+# + @alphaenumerate is ridiculously new, turned into @enumerate
+
+# roff output (-ms)
+porting.ms: $(srcdir)/porting.texi
+ sed -e '/\\input texinfo/d' \
+ -e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
+ -e '/^@ifinfo/,/^@end ifinfo/d' \
+ -e '/^@c/d' \
+ -e 's/{.*,,/{/' \
+ -e 's/@ / /g' \
+ -e 's/^@alphaenumerate/@enumerate/g' \
+ -e 's/^@end alphaenumerate/@end enumerate/g' \
+ $(srcdir)/porting.texi | \
+ $(TEXI2ROFF) -ms | \
+ sed -e 's/---/\\(em/g' \
+ >porting.ms
+
+# roff output (-mm)
+# '@noindent's removed due to texi2roff-2 mm bug; if yours is newer,
+# try leaving them in
+porting.mm: $(srcdir)/porting.texi
+ sed -e '/\\input texinfo/d' \
+ -e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
+ -e '/^@ifinfo/,/^@end ifinfo/d' \
+ -e '/^@c/d' \
+ -e 's/{.*,,/{/' \
+ -e '/@noindent/d' \
+ -e 's/@ / /g' \
+ -e 's/^@alphaenumerate/@enumerate/g' \
+ -e 's/^@end alphaenumerate/@end enumerate/g' \
+ $(srcdir)/porting.texi | \
+ $(TEXI2ROFF) -mm | \
+ sed -e 's/---/\\(em/g' \
+ >porting.mm
+
+# roff output (-me)
+porting.me: $(srcdir)/porting.texi
+ sed -e '/\\input texinfo/d' \
+ -e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
+ -e '/^@ifinfo/,/^@end ifinfo/d' \
+ -e '/^@c/d' \
+ -e 's/{.*,,/{/' \
+ -e 's/@ / /g' \
+ -e 's/^@alphaenumerate/@enumerate/g' \
+ -e 's/^@end alphaenumerate/@end enumerate/g' \
+ $(srcdir)/porting.texi | \
+ $(TEXI2ROFF) -me | \
+ sed -e 's/---/\\(em/g' \
+ >porting.me
+
+
+######################################################################
+
+clean mostlyclean:
+ -rm -f *.o *~ \#* core *.aux *.cp *.dvi *.fn *.ky *.log *.pg *.toc \
+ *.tp *.vr *.cps *.fns *.kys *.pgs *.tps *.vrs *.info* *.1 *.ps
+
+maintainer-clean realclean: clean
+ -rm -f
+
+install:
+
+install-info: info
+ for i in *.info* ; do \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i ; \
+ done
+
+clean-info:
+ -rm -rf *.info*
+
+distclean: clean
+ -rm -f Makefile config.cache config.log config.status
+
+Makefile: Makefile.in config.status
+ $(SHELL) config.status
+
+config.status: configure
+ $(SHELL) config.status --recheck
Index: configure.in
===================================================================
--- configure.in (nonexistent)
+++ configure.in (revision 345)
@@ -0,0 +1,16 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_PREREQ(2.59)
+AC_INIT(porting.texi)
+
+if test "$srcdir" = "." ; then
+ mdir=`echo "${with_multisubdir}/" \
+ | sed -e 's,\([[^/]][[^/]]*\),..,g' -e 's,^/$,,'`
+ AC_CONFIG_AUX_DIR(${mdir}../../..)
+else
+ AC_CONFIG_AUX_DIR(${srcdir}/../..)
+fi
+
+AC_PROG_INSTALL
+
+AC_CONFIG_FILES(Makefile)
+AC_OUTPUT
configure.in
Property changes :
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: porting.texi
===================================================================
--- porting.texi (nonexistent)
+++ porting.texi (revision 345)
@@ -0,0 +1,2100 @@
+\input texinfo @c -*- Texinfo -*-
+@setfilename porting.info
+@settitle Embed with GNU
+
+@c
+@c This file documents the process of porting the GNU tools to an
+@c embedded environment.
+@c
+
+@finalout
+@setchapternewpage off
+@iftex
+@raggedbottom
+@global@parindent=0pt
+@end iftex
+
+@titlepage
+@title Embed With GNU
+@subtitle Porting The GNU Tools To Embedded Systems
+@sp 4
+@subtitle Spring 1995
+@subtitle Very *Rough* Draft
+@author Rob Savoye - Cygnus Support
+@page
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1993, 1994, 1995 Cygnus Support
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+@end titlepage
+
+@ifinfo
+@format
+START-INFO-DIR-ENTRY
+* Embed with GNU: (porting-). Embed with GNU
+END-INFO-DIR-ENTRY
+@end format
+Copyright (c) 1993, 1994, 1995 Cygnus Support
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+@node Top
+@top Embed with GNU
+
+@end ifinfo
+@strong{Rough Draft}
+
+The goal of this document is to gather all the information needed to
+port the GNU tools to a new embedded target in one place. This will
+duplicate some info found in the other manual for the GNU tools, but
+this should be all you'll need.
+
+@menu
+* Libgloss:: Libgloss, a library of board support packages.
+* GCC:: Porting GCC/G++ to a new embedded target.
+* Libraries:: Making Newlib run on an new embedded target.
+* GDB:: Making GDB understand a new back end.
+* Binutils:: Using the GNU binary utilities.
+* Code Listings:: Listings of the commented source code from the
+ text.
+@end menu
+
+@node Libgloss, GCC, Top, Top
+@chapter Libgloss
+Libgloss is a library for all the details that usually get glossed over.
+This library refers to things like startup code, and usually I/O support
+for @code{gcc} and @code{C library}. The C library used through out
+this manual is @code{newlib}. Newlib is a ANSI conforming C library
+developed by Cygnus Support. Libgloss could easily be made to
+support other C libraries, and it can be used standalone as well. The
+standalone configuration is typically used when bringing up new
+hardware, or on small systems.
+
+For a long time, these details were part of newlib. This approach worked
+well when a complete tool chain only had to support one system. A tool
+chain refers to the series of compiler passes required to produce a
+binary file that will run on an embedded system. For C, the passes are
+cpp, gcc, gas, ld. Cpp is the preprocessor, which process all the header
+files and macros. Gcc is the compiler, which produces assembler from the
+processed C files. Gas assembles the code into object files, and then ld
+combines the object files and binds the code to addresses and produces
+the final executable image.
+
+Most of the time a tool chain does only have to support one target
+execution environment. An example of this would be a tool chain for the
+AMD 29k processor family. All of the execution environments for this
+processor are have the same interface, the same memory map, and the same
+I/O code. In this case all of the support code is in newlib/sys/FIXME.
+Libgloss's creation was forced initially be the @code{cpu32} processor
+family. There are many different execution environments for this line,
+and they vary wildly. newlib itself has only has a few dependencies that
+it needs for each target. These are explained later in this doc. The
+hardware dependent part of newlib was reorganized into a separate
+directory structure within newlib called the stub dirs. It was initially
+called this because most of the routines newlib needs for a target were
+simple stubs that do nothing, but return a value to the application. They
+only exist so the linker can produce a final executable image. This work
+was done during the early part of 1993.
+
+After a while it became apparent that this approach of isolating the
+hardware and systems files together made sense. Around this same time
+the stub dirs were made to run standalone, mostly so it could also be
+used to support GDB's remote debugging needs. At this time it was
+decided to move the stub dirs out of newlib and into it's own separate
+library so it could be used standalone, and be included in various other
+GNU tools without having to bring in all of newlib, which is large. The
+new library is called Libgloss, for Gnu Low-level OS support.
+
+@menu
+* Supported targets:: What targets libgloss currently
+ supports.
+* Building libgloss:: How to configure and built libgloss
+ for a target.
+* Board support:: How to add support for a new board.
+@end menu
+
+@node Supported targets, Building libgloss, Libgloss, Libgloss
+@section Supported Targets
+Currently libgloss is being used for the following targets:
+
+@menu
+* Sparclite:: Fujitsu's sparclite.
+* CPU32:: Various m68k based targets.
+* Mips:: Mips code based targets.
+* PA-RISC:: Precision Risc Organization..
+@end menu
+
+@node Sparclite, CPU32, , Supported targets
+@subsection Sparclite Targets Supported
+@c FIXME: put links to the docs in etc/targetdoc
+This is for the Fujitsu Sparclite family of processors. Currently this
+covers the ex930, ex931, ex932, ex933, and the ex934. In addition to the
+I/O code a startup file, this has a GDB debug-stub that gets linked into
+your application. This is an exception handler style debug stub. For
+more info, see the section on Porting GDB. @ref{GDB,,Porting GDB}.
+
+The Fujitsu eval boards use a host based terminal program to load and
+execute programs on the target. This program, @code{pciuh} is relatively
+new (in 1994) and it replaced the previous ROM monitor which had the
+shell in the ROM. GDB uses the the GDB remote protocol, the relevant
+source files from the gdb sources are remote-sparcl.c. The debug stub is
+part of libgloss and is called sparcl-stub.c.
+
+@node CPU32, Mips, Sparclite, Supported targets
+@subsection Motorola CPU32 Targets supported
+This refers to Motorola's m68k based CPU32 processor family. The crt0.S
+startup file should be usable with any target environment, and it's
+mostly just the I/O code and linker scripts that vary. Currently there
+is support for the Motorola MVME line of 6U VME boards and IDP
+line of eval boards. All of the
+Motorola VME boards run @code{Bug}, a ROM based debug monitor.
+This monitor has the feature of using user level traps to do I/O, so
+this code should be portable to other MVME boards with little if any
+change. The startup file also can remain unchanged. About the only thing
+that varies is the address for where the text section begins. This can
+be accomplished either in the linker script, or on the command line
+using the @samp{-Ttext [address]}.
+
+@c FIXME: Intermetrics or ISI wrote rom68k ?
+There is also support for the @code{rom68k} monitor as shipped on
+Motorola's IDP eval board line. This code should be portable across the
+range of CPU's the board supports. There is also GDB support for this
+target environment in the GDB source tree. The relevant files are
+gdb/monitor.c, monitor.h, and rom58k-rom.c. The usage of these files is
+discussed in the GDB section.
+
+@node Mips, PA-RISC, CPU32, Supported targets
+@subsection Mips core Targets Supported
+The Crt0 startup file should run on any mips target that doesn't require
+additional hardware initialization. The I/O code so far only supports a
+custom LSI33k based RAID disk controller board. It should easy to
+change to support the IDT line of eval boards. Currently the two
+debugging protocols supported by GDB for mips targets is IDT's mips
+debug protocol, and a customized hybrid of the standard GDB remote
+protocol and GDB's standard ROM monitor support. Included here is the
+debug stub for the hybrid monitor. This supports the LSI33k processor,
+and only has support for the GDB protocol commands @code{g}, @code{G},
+@code{m}, @code{M}, which basically only supports the register and
+memory reading and writing commands. This is part of libgloss and is
+called lsi33k-stub.c.
+
+The crt0.S should also work on the IDT line of eval boards, but has only
+been run on the LSI33k for now. There is no I/O support for the IDT eval
+board at this time. The current I/O code is for a customized version of
+LSI's @code{pmon} ROM monitor. This uses entry points into the monitor,
+and should easily port to other versions of the pmon monitor. Pmon is
+distributed in source by LSI.
+
+@node PA-RISC, , Mips, Supported targets
+@subsection PA-RISC Targets Supported
+This supports the various boards manufactured by the HP-PRO consortium.
+This is a group of companies all making variations on the PA-RISC
+processor. Currently supported are ports to the WinBond @samp{Cougar}
+board based around their w89k version of the PA. Also supported is the
+Oki op50n processor.
+
+There is also included, but never built an unfinished port to the HP 743
+board. This board is the main CPU board for the HP700 line of industrial
+computers. This target isn't exactly an embedded system, in fact it's
+really only designed to load and run HP-UX. Still, the crt0.S and I/O
+code are fully working. It is included mostly because their is a barely
+functioning exception handler GDB debug stub, and I hope somebody could
+use it. The other PRO targets all use GDB's ability to talk to ROM
+monitors directly, so it doesn't need a debug stub. There is also a
+utility that will produce a bootable file by HP's ROM monitor. This is
+all included in the hopes somebody else will finish it. :-)
+
+Both the WinBond board and the Oki board download srecords. The WinBond
+board also has support for loading the SOM files as produced by the
+native compiler on HP-UX. WinBond supplies a set of DOS programs that
+will allow the loading of files via a bidirectional parallel port. This
+has never been tested with the output of GNU SOM, as this manual is
+mostly for Unix based systems.
+
+@node Building libgloss, Board support, Supported targets, Libgloss
+@section Configuring and building libgloss.
+
+Libgloss uses an autoconf based script to configure. Autoconf scripts
+are portable shell scripts that are generated from a configure.in file.
+Configure input scripts are based themselves on m4. Most configure
+scripts run a series of tests to determine features the various
+supported features of the target. For features that can't be determined
+by a feature test, a makefile fragment is merged in. The configure
+process leaves creates a Makefile in the build directory. For libgloss,
+there are only a few configure options of importance. These are --target
+and --srcdir.
+
+Typically libgloss is built in a separate tree just for objects. In this
+manner, it's possible to have a single source tree, and multiple object
+trees. If you only need to configure for a single target environment,
+then you can configure in the source tree. The argument for --target is
+a config string. It's usually safest to use the full canonical opposed
+to the target alias. So, to configure for a CPU32 (m68k) with a separate
+source tree, use:
+
+@smallexample
+../src/libgloss/configure --verbose --target m68k-coff
+@end smallexample
+
+The configure script is in the source tree. When configure is invoked
+it will determine it's own source tree, so the --srcdir is would be
+redundant here.
+
+Once libgloss is configured, @code{make} is sufficient to build it. The
+default values for @code{Makefiles} are typically correct for all
+supported systems. The test cases in the testsuite will also built
+automatically as opposed to a @code{make check}, where test binaries
+aren't built till test time. This is mostly cause the libgloss
+testsuites are the last thing built when building the entire GNU source
+tree, so it's a good test of all the other compilation passes.
+
+The default values for the Makefiles are set in the Makefile fragment
+merged in during configuration. This fragment typically has rules like
+
+@smallexample
+CC_FOR_TARGET = `if [ -f $$@{OBJROOT@}/gcc/xgcc ] ; \
+ then echo $@{OBJROOT@}/gcc/xgcc -B$@{OBJROOT@}/gcc/ ; \
+ else t='$@{program_transform_name@}'; echo gcc | sed -e '' $$t ; fi`
+@end smallexample
+
+Basically this is a runtime test to determine whether there are freshly
+built executables for the other main passes of the GNU tools. If there
+isn't an executable built in the same object tree, then
+@emph{transformed}the generic tool name (like gcc) is transformed to the
+name typically used in GNU cross compilers. The names are
+typically based on the target's canonical name, so if you've configured
+for @code{m68k-coff} the transformed name is @code{m68k-coff-gcc} in
+this case. If you install with aliases or rename the tools, this won't
+work, and it will always look for tools in the path. You can force the a
+different name to work by reconfiguring with the
+@code{--program-transform-name} option to configure. This option takes a
+sed script like this @code{-e s,^,m68k-coff-,} which produces tools
+using the standard names (at least here at Cygnus).
+
+The search for the other GNU development tools is exactly the same idea.
+This technique gets messier when build options like @code{-msoft-float}
+support are used. The Makefile fragments set the @code{MUTILIB}
+variable, and if it is set, the search path is modified. If the linking
+is done with an installed cross compiler, then none of this needs to be
+used. This is done so libgloss will build automatically with a fresh,
+and uninstalled object tree. It also makes it easier to debug the other
+tools using libgloss's test suites.
+
+@node Board support, , Building libgloss, Libgloss
+@section Adding Support for a New Board
+
+This section explains how to add support for a new board to libgloss.
+In order to add support for a board, you must already have developed a
+toolchain for the target architecture.
+
+All of the changes you will make will be in the subdirectory named
+after the architecture used by your board. For example, if you are
+developing support for a new ColdFire board, you will modify files in
+the @file{m68k} subdirectory, as that subdirectory contains support
+for all 68K devices, including architecture variants like ColdFire.
+
+In general, you will be adding three components: a @file{crt0.S} file
+(@pxref{Crt0}), a linker script (@pxref{Linker Scripts}), and a
+hardware support library. Each should be prefixed with the name of
+your board. For example, if you ard adding support for a new Surf
+board, then you will be adding the assembly @file{surf-crt0.S} (which
+will be assembled into @file{surf-crt0.o}), the linker script
+@file{surf.ld}, and other C and assembly files which will be combined
+into the hardware support library @file{libsurf.a}.
+
+You should modify @file{Makefile.in} to define new variables
+corresponding to your board. Although there is some variation between
+architectures, the general convention is to use the following format:
+
+@example
+# The name of the crt0.o file.
+SURF_CRT0 = surf-crt0.o
+# The name of the linker script.
+SURF_SCRIPTS = surf.ld
+# The name of the hardware support library.
+SURF_BSP = libsurf.a
+# The object files that make up the hardware support library.
+SURF_OBJS = surf-file1.o surf-file2.o
+# The name of the Makefile target to use for installation.
+SURF_INSTALL = install-surf
+@end example
+
+Then, you should create the @code{$@{SURF_BSP@}} and
+@code{$@{SURF_INSTALL@}} make targets. Add @code{$@{SURF_CRT0@}} to
+the dependencies for the @code{all} target and add
+@code{$@{SURF_INSTALL@}} to the dependencies for the @code{install}
+target. Now, when libgloss is built and installed, support for your
+BSP will be installed as well.
+
+@node GCC, Libraries, Libgloss, Top
+@chapter Porting GCC
+
+Porting GCC requires two things, neither of which has anything to do
+with GCC. If GCC already supports a processor type, then all the work in
+porting GCC is really a linker issue. All GCC has to do is produce
+assembler output in the proper syntax. Most of the work is done by the
+linker, which is described elsewhere.
+
+Mostly all GCC does is format the command line for the linker pass. The
+command line for GCC is set in the various config subdirectories of gcc.
+The options of interest to us are @code{CPP_SPEC} and
+@code{STARTFILE_SPEC}. CPP_SPEC sets the builtin defines for your
+environment. If you support multiple environments with the same
+processor, then OS specific defines will need to be elsewhere.
+@c FIXME: Check these names
+
+@code{STARTFILE_SPEC}
+
+Once you have linker support, GCC will be able to produce a fully linked
+executable image. The only @emph{part} of GCC that the linker wants is a
+crt0.o, and a memory map. If you plan on running any programs that do
+I/O of any kind, you'll need to write support for the C library, which
+is described elsewhere.
+
+@menu
+* Overview:: An overview as to the compilation passes.
+* Options:: Useful GCC options for embedded systems.
+@end menu
+
+@node Overview, Options, , GCC
+@section Compilation passes
+
+GCC by itself only compiles the C or C++ code into assembler. Typically
+GCC invokes all the passes required for you. These passes are cpp, cc1,
+gas, ld. @code{cpp} is the C preprocessor. This will merge in the
+include files, expand all macros definitions, and process all the
+@code{#ifdef} sections. To see the output of ccp, invoke gcc with the
+@code{-E} option, and the preprocessed file will be printed on the
+stdout. cc1 is the actual compiler pass that produces the assembler for
+the processed file. GCC is actually only a driver program for all the
+compiler passes. It will format command line options for the other passes.
+The usual command line GCC uses for the final link phase will have LD
+link in the startup code and additional libraries by default.
+
+GNU AS started it's life to only function as a compiler pass, but
+these days it can also be used as a source level assembler. When used as
+a source level assembler, it has a companion assembler preprocessor
+called @code{gasp}. This has a syntax similar to most other assembler
+macros packages. GAS emits a relocatable object file from the assembler
+source. The object file contains the executable part of the application,
+and debug symbols.
+
+LD is responsible for resolving the addresses and symbols to something
+that will be fully self-contained. Some RTOS's use relocatable object
+file formats like @code{a.out}, but more commonly the final image will
+only use absolute addresses for symbols. This enables code to be burned
+into PROMS as well. Although LD can produce an executable image, there
+is usually a hidden object file called @code{crt0.o} that is required as
+startup code. With this startup code and a memory map, the executable
+image will actually run on the target environment. @ref{Crt0,,Startup
+Files}.
+
+The startup code usually defines a special symbol like @code{_start}
+that is the default base address for the application, and the first
+symbol in the executable image. If you plan to use any routines from the
+standard C library, you'll also need to implement the functions that
+this library is dependent on. @ref{Libraries,,Porting Newlib}.
+
+@node Options, , Overview, GCC
+@c FIXME: Need stuff here about -fpic, -Ttext, etc...
+
+Options for the various development tools are covered in more detail
+elsewhere. Still, the amount of options can be an overwhelming amount of
+stuff, so the options most suited to embedded systems are summarized
+here. If you use GCC as the main driver for all the passes, most of the
+linker options can be passed directly to the compiler. There are also
+GCC options that control how the GCC driver formats the command line
+arguments for the linker.
+
+@menu
+* GCC Options:: Options for the compiler.
+* GAS Options:: Options for the assembler.
+* LD Options:: Options for the linker.
+@end menu
+
+@node GCC Options, GAS Options, , Options
+Most of the GCC options that we're interested control how the GCC driver
+formats the options for the linker pass.
+
+@c FIXME: this section is still under work.
+@table @code
+@item -nostartfiles
+@item -nostdlib
+@item -Xlinker
+Pass the next option directly to the linker.
+
+@item -v
+@item -fpic
+@end table
+
+@node GAS Options, LD Options, GCC Options, Options
+@c FIXME: Needs stuff here
+
+@node LD Options, , GAS Options, Options
+@c FIXME: Needs stuff here
+
+
+@node Libraries, GDB, GCC, Top
+@chapter Porting newlib
+
+@menu
+* Crt0:: Crt0.S.
+* Linker Scripts:: Linker scripts for memory management.
+* What to do now:: Tricks for manipulating formats.
+* Libc:: Making libc work.
+@end menu
+
+@node Crt0, Linker Scripts, , Libraries
+@section Crt0, the main startup file
+
+To make a program that has been compiled with GCC to run, you
+need to write some startup code. The initial piece of startup code is
+called a crt0. (C RunTime 0) This is usually written in assembler, and
+it's object gets linked in first, and bootstraps the rest of the
+application when executed. This file needs to do the following things.
+
+@enumerate
+@item
+Initialize anything that needs it. This init section varies. If you are
+developing an application that gets download to a ROM monitor, then
+there is usually no need for any special initialization. The ROM monitor
+handles it for you.
+
+If you plan to burn your code in a ROM, then the crt0 typically has to
+do all the hardware initialization that is required to run an
+application. This can include things like initializing serial ports or
+run a memory check. It all depends on the hardware.
+
+@item
+Zero the BSS section. This is for uninitialized data. All the addresses in
+this section need to be initialized to zero so that programs that forget
+to check new variables default value will get unpredictable results.
+
+@item
+Call main()
+This is what basically starts things running. If your ROM monitor
+supports it, then first setup argc and argv for command line arguments
+and an environment pointer. Then branch to main(). For G++ the the main
+routine gets a branch to __main inserted by the code generator at the
+very top. __main() is used by G++ to initialize it's internal tables.
+__main() then returns back to your original main() and your code gets
+executed.
+
+@item
+Call exit()
+After main() has returned, you need to cleanup things and return control
+of the hardware from the application. On some hardware, there is nothing
+to return to, especially if your program is in ROM. Sometimes the best
+thing to do in this case is do a hardware reset, or branch back to the
+start address all over again.
+
+When there is a ROM monitor present, usually a user trap can be called
+and then the ROM takes over. Pick a safe vector with no side
+effects. Some ROMs have a builtin trap handler just for this case.
+@end enumerate
+portable between all the m68k based boards we have here.
+@ref{crt0.S,,Example Crt0.S}.
+
+
+@smallexample
+/* ANSI concatenation macros. */
+
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+@end smallexample
+These we'll use later.
+
+@smallexample
+/* These are predefined by new versions of GNU cpp. */
+
+#ifndef __USER_LABEL_PREFIX__
+#define __USER_LABEL_PREFIX__ _
+#endif
+
+/* Use the right prefix for global labels. */
+#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+
+@end smallexample
+
+These macros are to make this code portable between both @emph{COFF} and
+@emph{a.out}. @emph{COFF} always has an @var{_ (underline)} prepended on
+the front of all global symbol names. @emph{a.out} has none.
+
+@smallexample
+#ifndef __REGISTER_PREFIX__
+#define __REGISTER_PREFIX__
+#endif
+
+/* Use the right prefix for registers. */
+#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
+
+#define d0 REG (d0)
+#define d1 REG (d1)
+#define d2 REG (d2)
+#define d3 REG (d3)
+#define d4 REG (d4)
+#define d5 REG (d5)
+#define d6 REG (d6)
+#define d7 REG (d7)
+#define a0 REG (a0)
+#define a1 REG (a1)
+#define a2 REG (a2)
+#define a3 REG (a3)
+#define a4 REG (a4)
+#define a5 REG (a5)
+#define a6 REG (a6)
+#define fp REG (fp)
+#define sp REG (sp)
+@end smallexample
+
+This is for portability between assemblers. Some register names have a
+@var{%} or @var{$} prepended to the register name.
+
+@smallexample
+/*
+ * Set up some room for a stack. We just grab a chunk of memory.
+ */
+ .set stack_size, 0x2000
+ .comm SYM (stack), stack_size
+@end smallexample
+
+Set up space for the stack. This can also be done in the linker script,
+but it typically gets done here.
+
+@smallexample
+/*
+ * Define an empty environment.
+ */
+ .data
+ .align 2
+SYM (environ):
+ .long 0
+@end smallexample
+
+Set up an empty space for the environment. This is bogus on any most ROM
+monitor, but we setup a valid address for it, and pass it to main. At
+least that way if an application checks for it, it won't crash.
+
+@smallexample
+ .align 2
+ .text
+ .global SYM (stack)
+
+ .global SYM (main)
+ .global SYM (exit)
+/*
+ * This really should be __bss_start, not SYM (__bss_start).
+ */
+ .global __bss_start
+@end smallexample
+
+Setup a few global symbols that get used elsewhere. @var{__bss_start}
+needs to be unchanged, as it's setup by the linker script.
+
+@smallexample
+/*
+ * start -- set things up so the application will run.
+ */
+SYM (start):
+ link a6, #-8
+ moveal #SYM (stack) + stack_size, sp
+
+/*
+ * zerobss -- zero out the bss section
+ */
+ moveal #__bss_start, a0
+ moveal #SYM (end), a1
+1:
+ movel #0, (a0)
+ leal 4(a0), a0
+ cmpal a0, a1
+ bne 1b
+@end smallexample
+
+The global symbol @code{start} is used by the linker as the default
+address to use for the @code{.text} section. then it zeros the
+@code{.bss} section so the uninitialized data will all be cleared. Some
+programs have wild side effects from having the .bss section let
+uncleared. Particularly it causes problems with some implementations of
+@code{malloc}.
+
+@smallexample
+/*
+ * Call the main routine from the application to get it going.
+ * main (argc, argv, environ)
+ * We pass argv as a pointer to NULL.
+ */
+ pea 0
+ pea SYM (environ)
+ pea sp@@(4)
+ pea 0
+ jsr SYM (main)
+ movel d0, sp@@-
+@end smallexample
+
+Setup the environment pointer and jump to @code{main()}. When
+@code{main()} returns, it drops down to the @code{exit} routine below.
+
+@smallexample
+/*
+ * _exit -- Exit from the application. Normally we cause a user trap
+ * to return to the ROM monitor for another run.
+ */
+SYM (exit):
+ trap #0
+@end smallexample
+
+Implementing @code{exit} here is easy. Both the @code{rom68k} and @code{bug}
+can handle a user caused exception of @code{zero} with no side effects.
+Although the @code{bug} monitor has a user caused trap that will return
+control to the ROM monitor, this solution has been more portable.
+
+@node Linker Scripts, What to do now, Crt0, Libraries
+@section Linker scripts for memory management
+
+The linker script sets up the memory map of an application. It also
+sets up default values for variables used elsewhere by sbrk() and the
+crt0. These default variables are typically called @code{_bss_start} and
+@code{_end}.
+
+For G++, the constructor and destructor tables must also be setup here.
+The actual section names vary depending on the object file format. For
+@code{a.out} and @code{coff}, the three main sections are @code{.text},
+@code{.data}, and @code{.bss}.
+
+Now that you have an image, you can test to make sure it got the
+memory map right. You can do this by having the linker create a memory
+map (by using the @code{-Map} option), or afterwards by using @code{nm} to
+check a few critical addresses like @code{start}, @code{bss_end}, and
+@code{_etext}.
+
+Here's a breakdown of a linker script for a m68k based target board.
+See the file @code{libgloss/m68k/idp.ld}, or go to the appendixes in
+the end of the manual. @ref{idp.ld,,Example Linker Script}.
+
+@smallexample
+STARTUP(crt0.o)
+OUTPUT_ARCH(m68k)
+INPUT(idp.o)
+SEARCH_DIR(.)
+__DYNAMIC = 0;
+@end smallexample
+
+The @code{STARTUP} command loads the file specified so that it's
+first. In this case it also doubles to load the file as well, because
+the m68k-coff configuration defaults to not linking in the crt0.o by
+default. It assumes that the developer probably has their own crt0.o.
+This behavior is controlled in the config file for each architecture.
+It's a macro called @code{STARTFILE_SPEC}, and if it's set to
+@code{null}, then when @code{gcc} formats it's command line, it doesn't
+add @code{crto.o}. Any file name can be specified here, but the default
+is always @code{crt0.o}.
+
+Course if you only use @code{ld} to link, then the control of whether or
+not to link in @code{crt0.o} is done on the command line. If you have
+multiple crto files, then you can leave this out all together, and link
+in the @code{crt0.o} in the makefile, or by having different linker
+scripts. Sometimes this is done for initializing floating point
+optionally, or to add device support.
+
+The @code{OUTPUT_ARCH} sets architecture the output file is for.
+
+@code{INPUT} loads in the file specified. In this case, it's a relocated
+library that contains the definitions for the low-level functions need
+by libc.a. This could have also been specified on the command line, but
+as it's always needed, it might as well be here as a default.
+@code{SEARCH_DIR} specifies the path to look for files, and
+@code{_DYNAMIC} means in this case there are no shared libraries.
+
+@c FIXME: Check the linker manual to make sure this is accurate.
+@smallexample
+/*
+ * Setup the memory map of the MC68ec0x0 Board (IDP)
+ * stack grows up towards high memory. This works for
+ * both the rom68k and the mon68k monitors.
+ */
+MEMORY
+@{
+ ram : ORIGIN = 0x10000, LENGTH = 2M
+@}
+@end smallexample
+
+This specifies a name for a section that can be referred to later in the
+script. In this case, it's only a pointer to the beginning of free RAM
+space, with an upper limit at 2M. If the output file exceeds the upper
+limit, it will produce an error message.
+
+@smallexample
+/*
+ * stick everything in ram (of course)
+ */
+SECTIONS
+@{
+ .text :
+ @{
+ CREATE_OBJECT_SYMBOLS
+ *(.text)
+ etext = .;
+ __CTOR_LIST__ = .;
+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
+ *(.ctors)
+ LONG(0)
+ __CTOR_END__ = .;
+ __DTOR_LIST__ = .;
+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
+ *(.dtors)
+ LONG(0)
+ __DTOR_END__ = .;
+ *(.lit)
+ *(.shdata)
+ @} > ram
+ .shbss SIZEOF(.text) + ADDR(.text) : @{
+ *(.shbss)
+ @}
+@end smallexample
+
+Set up the @code{.text} section. In a @code{COFF} file, .text is where
+all the actual instructions are. This also sets up the @emph{CONTRUCTOR}
+and the @emph{DESTRUCTOR} tables for @code{G++}. Notice that the section
+description redirects itself to the @emph{ram} variable setup earlier.
+
+@smallexample
+ .talias : @{ @} > ram
+ .data : @{
+ *(.data)
+ CONSTRUCTORS
+ _edata = .;
+ @} > ram
+@end smallexample
+
+Setup the @code{.data} section. In a @code{coff} file, this is where all
+he initialized data goes. @code{CONSTRUCTORS} is a special command used
+by @code{ld}.
+
+@smallexample
+ .bss SIZEOF(.data) + ADDR(.data) :
+ @{
+ __bss_start = ALIGN(0x8);
+ *(.bss)
+ *(COMMON)
+ end = ALIGN(0x8);
+ _end = ALIGN(0x8);
+ __end = ALIGN(0x8);
+ @}
+ .mstack : @{ @} > ram
+ .rstack : @{ @} > ram
+ .stab . (NOLOAD) :
+ @{
+ [ .stab ]
+ @}
+ .stabstr . (NOLOAD) :
+ @{
+ [ .stabstr ]
+ @}
+@}
+@end smallexample
+
+Setup the @code{.bss} section. In a @code{COFF} file, this is where
+unitialized data goes. The symbols @code{_bss_start} and @code{_end}
+are setup here for use by the @code{crt0.o} when it zero's the
+@code{.bss} section.
+
+
+@node What to do now, Libc, Linker Scripts, Libraries
+@section What to do when you have a binary image
+
+A few ROM monitors load binary images, typically @code{a.out}, but most all
+will load an @code{srecord}. An srecord is an ASCII representation of a binary
+image. At it's simplest, an srecord is an address, followed by a byte
+count, followed by the bytes, and a 2's compliment checksum. A whole
+srecord file has an optional @emph{start} record, and a required @emph{end}
+record. To make an srecord from a binary image, the GNU @code{objcopy} program
+is used. This will read the image and make an srecord from it. To do
+this, invoke objcopy like this: @code{objcopy -O srec infile outfile}. Most
+PROM burners also read srecords or a similar format. Use @code{objdump -i} to
+get a list of support object files types for your architecture.
+
+@node Libc, , What to do now, Libraries
+@section Libraries
+
+This describes @code{newlib}, a freely available libc replacement. Most
+applications use calls in the standard C library. When initially linking
+in libc.a, several I/O functions are undefined. If you don't plan on
+doing any I/O, then you're OK, otherwise they need to be created. These
+routines are read, write, open, close. sbrk, and kill. Open & close
+don't need to be fully supported unless you have a filesystems, so
+typically they are stubbed out. Kill is also a stub, since you can't do
+process control on an embedded system.
+
+Sbrk() is only needed by applications that do dynamic memory
+allocation. It's uses the symbol @code{_end} that is setup in the linker
+script. It also requires a compile time option to set the upper size
+limit on the heap space. This leaves us with read and write, which are
+required for serial I/O. Usually these two routines are written in C,
+and call a lower level function for the actual I/O operation. These two
+lowest level I/O primitives are inbyte() and outbyte(), and are also
+used by GDB back ends if you've written an exception handler. Some
+systems also implement a havebyte() for input as well.
+
+Other commonly included functions are routines for manipulating
+LED's on the target (if they exist) or low level debug help. Typically a
+putnum() for printing words and bytes as a hex number is helpful, as
+well as a low-level print() to output simple strings.
+
+As libg++ uses the I/O routines in libc.a, if read and write work,
+then libg++ will also work with no additional changes.
+
+@menu
+* I/O Support:: Functions that make serial I/O work.
+* Memory Support:: Memory support.
+* Misc Support:: Other needed functions.
+* Debugging:: Useful Debugging Functions
+@end menu
+
+@node I/O Support, Memory Support, , Libc
+@subsection Making I/O work
+
+@node Memory Support, Misc Support, I/O Support, Libc
+@subsection Routines for dynamic memory allocation
+To support using any of the memory functions, you need to implement
+sbrk(). @code{malloc()}, @code{calloc()}, and @code{realloc()} all call
+@code{sbrk()} at there lowest level. @code{caddr_t} is defined elsewhere
+as @code{char *}. @code{RAMSIZE} is presently a compile time option. All
+this does is move a pointer to heap memory and check for the upper
+limit. @ref{glue.c,,Example libc support code}. @code{sbrk()} returns a
+pointer to the previous value before more memory was allocated.
+
+@smallexample
+/* _end is set in the linker command file *
+extern caddr_t _end;/
+
+/* just in case, most boards have at least some memory */
+#ifndef RAMSIZE
+# define RAMSIZE (caddr_t)0x100000
+#endif
+
+/*
+ * sbrk -- changes heap size size. Get nbytes more
+ * RAM. We just increment a pointer in what's
+ * left of memory on the board.
+ */
+caddr_t
+sbrk(nbytes)
+ int nbytes;
+@{
+ static caddr_t heap_ptr = NULL;
+ caddr_t base;
+
+ if (heap_ptr == NULL) @{
+ heap_ptr = (caddr_t)&_end;
+ @}
+
+ if ((RAMSIZE - heap_ptr) >= 0) @{
+ base = heap_ptr;
+ heap_ptr += nbytes;
+ return (base);
+ @} else @{
+ errno = ENOMEM;
+ return ((caddr_t)-1);
+ @}
+@}
+@end smallexample
+
+@node Misc Support, Debugging, Memory Support, Libc
+@subsection Misc support routines
+
+These are called by @code{newlib} but don't apply to the embedded
+environment. @code{isatty()} is self explanatory. @code{kill()} doesn't
+apply either in an environment withno process control, so it justs
+exits, which is a similar enough behavior. @code{getpid()} can safely
+return any value greater than 1. The value doesn't effect anything in
+@code{newlib} because once again there is no process control.
+
+@smallexample
+/*
+ * isatty -- returns 1 if connected to a terminal device,
+ * returns 0 if not. Since we're hooked up to a
+ * serial port, we'll say yes and return a 1.
+ */
+int
+isatty(fd)
+ int fd;
+@{
+ return (1);
+@}
+
+/*
+ * getpid -- only one process, so just return 1.
+ */
+#define __MYPID 1
+int
+getpid()
+@{
+ return __MYPID;
+@}
+
+/*
+ * kill -- go out via exit...
+ */
+int
+kill(pid, sig)
+ int pid;
+ int sig;
+@{
+ if(pid == __MYPID)
+ _exit(sig);
+ return 0;
+@}
+@end smallexample
+
+@node Debugging, , Misc Support, Libc
+@subsection Useful debugging functions
+
+There are always a few useful functions for debugging your project in
+progress. I typically implement a simple @code{print()} routine that
+runs standalone in liblgoss, with no @code{newlib} support. The I/O
+function @code{outbyte()} can also be used for low level debugging. Many
+times print will work when there are problems that cause @code{printf()} to
+cause an exception. @code{putnum()} is just to print out values in hex
+so they are easier to read.
+
+@smallexample
+/*
+ * print -- do a raw print of a string
+ */
+int
+print(ptr)
+char *ptr;
+@{
+ while (*ptr) @{
+ outbyte (*ptr++);
+ @}
+@}
+
+/*
+ * putnum -- print a 32 bit number in hex
+ */
+int
+putnum (num)
+unsigned int num;
+@{
+ char buffer[9];
+ int count;
+ char *bufptr = buffer;
+ int digit;
+
+ for (count = 7 ; count >= 0 ; count--) @{
+ digit = (num >> (count * 4)) & 0xf;
+
+ if (digit <= 9)
+ *bufptr++ = (char) ('0' + digit);
+ else
+ *bufptr++ = (char) ('a' - 10 + digit);
+ @}
+
+ *bufptr = (char) 0;
+ print (buffer);
+ return;
+@}
+@end smallexample
+
+If there are LEDs on the board, they can also be put to use for
+debugging when the serial I/O code is being written. I usually implement
+a @code{zylons()} function, which strobes the LEDS (if there is more
+than one) in sequence, creating a rotating effect. This is convenient
+between I/O to see if the target is still alive. Another useful LED
+function is @code{led_putnum()}, which takes a digit and displays it as
+a bit pattern or number. These usually have to be written in assembler
+for each target board. Here are a number of C based routines that may be
+useful.
+
+@code{led_putnum()} puts a number on a single digit segmented
+LED display. This LED is set by setting a bit mask to an address, where
+1 turns the segment off, and 0 turns it on. There is also a little
+decimal point on the LED display, so it gets the leftmost bit. The other
+bits specify the segment location. The bits look like:
+
+@smallexample
+ [d.p | g | f | e | d | c | b | a ] is the byte.
+@end smallexample
+
+The locations are set up as:
+
+@smallexample
+ a
+ -----
+ f | | b
+ | g |
+ -----
+ | |
+ e | | c
+ -----
+ d
+@end smallexample
+
+This takes a number that's already been converted to a string, and
+prints it.
+
+@smallexample
+#define LED_ADDR 0xd00003
+
+void
+led_putnum ( num )
+char num;
+@{
+ static unsigned char *leds = (unsigned char *)LED_ADDR;
+ static unsigned char num_bits [18] = @{
+ 0xff, /* clear all */
+ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98, /* numbers 0-9 */
+ 0x98, 0x20, 0x3, 0x27, 0x21, 0x4, 0xe /* letters a-f */
+ @};
+
+ if (num >= '0' && num <= '9')
+ num = (num - '0') + 1;
+
+ if (num >= 'a' && num <= 'f')
+ num = (num - 'a') + 12;
+
+ if (num == ' ')
+ num = 0;
+
+ *leds = num_bits[num];
+@}
+
+/*
+ * zylons -- draw a rotating pattern. NOTE: this function never returns.
+ */
+void
+zylons()
+@{
+ unsigned char *leds = (unsigned char *)LED_ADDR;
+ unsigned char curled = 0xfe;
+
+ while (1)
+ @{
+ *leds = curled;
+ curled = (curled >> 1) | (curled << 7);
+ delay ( 200 );
+ @}
+@}
+@end smallexample
+
+
+@node GDB, Binutils, Libraries, Top
+@chapter Writing a new GDB backend
+
+Typically, either the low-level I/O routines are used for debugging, or
+LEDs, if present. It is much easier to use GDb for debugging an
+application. There are several different techniques used to have GDB work
+remotely. Commonly more than one kind of GDB interface is used to cober
+a wide variety of development needs.
+
+The most common style of GDB backend is an exception handler for
+breakpoints. This is also called a @emph{gdb stub}, and is requires the
+two additional lines of init code in your @code{main()} routine. The GDB
+stubs all use the GDB @emph{remote protocol}. When the application gets a
+breakpoint exception, it communicates to GDB on the host.
+
+Another common style of interfacing GDB to a target is by using an
+existing ROM monitor. These break down into two main kinds, a similar
+protocol to the GDB remote protocol, and an interface that uses the ROM
+monitor directly. This kind has GDB simulating a human operator, and all
+GDB does is work as a command formatter and parser.
+
+@menu
+* GNU remote protocol:: The standard remote protocol.
+* Exception handler:: A linked in exception handler.
+* ROM monitors:: Using a ROM monitor as a backend.
+* Other remote protocols:: Adding support for new protocols.
+@end menu
+
+@node GNU remote protocol, Exception handler, ,GDB
+@section The standard remote protocol
+
+The standard remote protocol is a simple, packet based scheme. A debug
+packet whose contents are @emph{} is encapsulated for transmission
+in the form:
+
+@smallexample
+ $ # CSUM1 CSUM2
+@end smallexample
+
+@emph{} must be ASCII alphanumeric and cannot include characters
+@code{$} or @code{#}. If @emph{} starts with two characters
+followed by @code{:}, then the existing stubs interpret this as a
+sequence number. For example, the command @code{g} is used to read the
+values of the registers. So, a packet to do this would look like
+
+@smallexample
+ $g#67
+@end smallexample
+
+@emph{CSUM1} and @emph{CSUM2} are an ascii representation in hex of an
+8-bit checksum of @emph{}, the most significant nibble is sent first.
+the hex digits 0-9,a-f are used.
+
+A simple protocol is used when communicating with the target. This is
+mainly to give a degree of error handling over the serial cable. For
+each packet transmitted successfully, the target responds with a
+@code{+} (@code{ACK}). If there was a transmission error, then the target
+responds with a @code{-} (@code{NAK}). An error is determined when the
+checksum doesn't match the calculated checksum for that data record.
+Upon reciept of the @code{ACK}, @code{GDB} can then transmit the next
+packet.
+
+Here is a list of the main functions that need to be supported. Each data
+packet is a command with a set number of bytes in the command packet.
+Most commands either return data, or respond with a @code{NAK}. Commands
+that don't return data respond with an @code{ACK}. All data values are
+ascii hex digits. Every byte needs two hex digits to represent t. This
+means that a byte with the value @samp{7} becomes @samp{07}. On a 32 bit
+machine this works out to 8 characters per word. All of the bytes in a
+word are stored in the target byte order. When writing the host side of
+the GDB protocol, be careful of byte order, and make sure that the code
+will run on both big and little endian hosts and produce the same answers.
+
+These functions are the minimum required to make a GDB backend work. All
+other commands are optional, and not supported by all GDB backends.
+
+@table @samp
+@item read registers @code{g}
+
+returns @code{XXXXXXXX...}
+
+Registers are in the internal order for GDB, and the bytes in a register
+are in the same order the machine uses. All values are in sequence
+starting with register 0. All registers are listed in the same packet. A
+sample packet would look like @code{$g#}.
+
+@item write registers @code{GXXXXXXXX...}
+@code{XXXXXXXX} is the value to set the register to. Registers are in
+the internal order for GDB, and the bytes in a register are in the same
+order the machine uses. All values are in sequence starting with
+register 0. All registers values are listed in the same packet. A sample
+packet would look like @code{$G000000001111111122222222...#}
+
+returns @code{ACK} or @code{NAK}
+
+@item read memory @code{mAAAAAAAA,LLLL}
+@code{AAAAAAAA} is address, @code{LLLL} is length. A sample packet would
+look like @code{$m00005556,0024#}. This would request 24 bytes starting
+at address @emph{00005556}
+
+returns @code{XXXXXXXX...}
+@code{XXXXXXXX} is the memory contents. Fewer bytes than requested will
+be returned if only part of the data can be read. This can be determined
+by counting the values till the end of packet @code{#} is seen and
+comparing that with the total count of bytes that was requested.
+
+@item write memory @code{MAAAAAAAA,LLLL:XXXXXXXX}
+@code{AAAAAAAA} is the starting address, @code{LLLL} is the number of
+bytes to be written, and @code{XXXXXXXX} is value to be written. A
+sample packet would look like
+@code{$M00005556,0024:101010101111111100000000...#}
+
+returns @code{ACK} or @code{NAK} for an error. @code{NAK} is also
+returned when only part of the data is written.
+
+@item continue @code{cAAAAAAAAA}
+@code{AAAAAAAA} is address to resume execution at. If @code{AAAAAAAA} is
+omitted, resume at the curent address of the @code{pc} register.
+
+returns the same replay as @code{last signal}. There is no immediate
+replay to @code{cont} until the next breakpoint is reached, and the
+program stops executing.
+
+@item step sAA..AA
+@code{AA..AA} is address to resume
+If @code{AA..AA} is omitted, resume at same address.
+
+returns the same replay as @code{last signal}. There is no immediate
+replay to @code{step} until the next breakpoint is reached, and the
+program stops executing.
+
+@item last signal @code{?}
+
+This returns one of the following:
+
+@itemize @bullet
+@item @code{SAA}
+Where @code{AA} is the number of the last signal.
+Exceptions on the target are converted to the most similar Unix style
+signal number, like @code{SIGSEGV}. A sample response of this type would
+look like @code{$S05#}.
+
+@item TAAnn:XXXXXXXX;nn:XXXXXXXX;nn:XXXXXXXX;
+@code{AA} is the signal number.
+@code{nn} is the register number.
+@code{XXXXXXXX} is the register value.
+
+@item WAA
+The process exited, and @code{AA} is the exit status. This is only
+applicable for certains sorts of targets.
+
+@end itemize
+
+These are used in some GDB backends, but not all.
+
+@item write reg @code{Pnn=XXXXXXXX}
+Write register @code{nn} with value @code{XXXXXXXX}.
+
+returns @code{ACK} or @code{NAK}
+
+@item kill request k
+
+@item toggle debug d
+toggle debug flag (see 386 & 68k stubs)
+
+@item reset r
+reset -- see sparc stub.
+
+@item reserved @code{other}
+On other requests, the stub should ignore the request and send an empty
+response @code{$#}. This way we can extend the protocol and GDB
+can tell whether the stub it is talking to uses the old or the new.
+
+@item search @code{tAA:PP,MM}
+Search backwards starting at address @code{AA} for a match with pattern
+PP and mask @code{MM}. @code{PP} and @code{MM} are 4 bytes.
+
+@item general query @code{qXXXX}
+Request info about XXXX.
+
+@item general set @code{QXXXX=yyyy}
+Set value of @code{XXXX} to @code{yyyy}.
+
+@item query sect offs @code{qOffsets}
+Get section offsets. Reply is @code{Text=xxx;Data=yyy;Bss=zzz}
+
+@item console output Otext
+Send text to stdout. The text gets display from the target side of the
+serial connection.
+
+@end table
+
+Responses can be run-length encoded to save space. A @code{*}means that
+the next character is an ASCII encoding giving a repeat count which
+stands for that many repetitions of the character preceding the @code{*}.
+The encoding is n+29, yielding a printable character where n >=3
+(which is where run length encoding starts to win). You can't use a
+value of where n >126 because it's only a two byte value. An example
+would be a @code{0*03} means the same thing as @code{0000}.
+
+@node Exception handler, ROM monitors, GNU remote protocol, GDB
+@section A linked in exception handler
+
+A @emph{GDB stub} consists of two parts, support for the exception
+handler, and the exception handler itself. The exception handler needs
+to communicate to GDB on the host whenever there is a breakpoint
+exception. When GDB starts a program running on the target, it's polling
+the serial port during execution looking for any debug packets. So when
+a breakpoint occurs, the exception handler needs to save state, and send
+a GDB remote protocol packet to GDB on the host. GDB takes any output
+that isn't a debug command packet and displays it in the command window.
+
+Support for the exception handler varies between processors, but the
+minimum supported functions are those needed by GDB. These are functions
+to support the reading and writing of registers, the reading and writing
+of memory, start execution at an address, single step, and last signal.
+Sometimes other functions for adjusting the baud rate, or resetting the
+hardware are implemented.
+
+Once GDB gets the command packet from the breakpoint, it will read a few
+registers and memory locations an then wait for the user. When the user
+types @code{run} or @code{continue} a @code{continue} command is issued
+to the backend, and control returns from the breakpoint routine to the
+application.
+
+@node ROM monitors, Other remote protocols, Exception handler, GDB
+@section Using a ROM monitor as a backend
+GDB also can mimic a human user and use a ROM monitors normal debug
+commands as a backend. This consists mostly of sending and parsing
+@code{ASCII} strings. All the ROM monitor interfaces share a common set
+of routines in @code{gdb/monitor.c}. This supports adding new ROM
+monitor interfaces by filling in a structure with the common commands
+GDB needs. GDb already supports several command ROM monitors, including
+Motorola's @code{Bug} monitor for their VME boards, and the Rom68k
+monitor by Integrated Systems, Inc. for various m68k based boards. GDB
+also supports the custom ROM monitors on the WinBond and Oki PA based
+targets. There is builtin support for loading files to ROM monitors
+specifically. GDB can convert a binary into an srecord and then load it
+as an ascii file, or using @code{xmodem}.
+
+@c FIXME: do I need trademark somethings here ? Is Integrated the right
+@c company?
+
+@node Other remote protocols, ,ROM monitors, GDB
+@section Adding support for new protocols
+@c FIXME: write something here
+
+@node Binutils, Code Listings, GDB, Top
+
+@node Code Listings, idp.ld, Binutils, Top
+@appendix Code Listings
+
+@menu
+* idp.ld:: A m68k linker script.
+* crt0.S:: Crt0.S for an m68k.
+* glue.c:: C based support for for Stdio functions.
+* mvme.S:: Rom monitor based I/O support in assembler.
+* io.c:: C based for memory mapped I/O.
+* leds.c:: C based LED routines.
+@end menu
+
+@node idp.ld, crt0.S, Code Listings, Code Listings
+@section Linker script for the IDP board
+
+This is the linker script script that is used on the Motorola IDP board.
+
+@example
+STARTUP(crt0.o)
+OUTPUT_ARCH(m68k)
+INPUT(idp.o)
+SEARCH_DIR(.)
+__DYNAMIC = 0;
+/*
+ * Setup the memory map of the MC68ec0x0 Board (IDP)
+ * stack grows up towards high memory. This works for
+ * both the rom68k and the mon68k monitors.
+ */
+MEMORY
+@{
+ ram : ORIGIN = 0x10000, LENGTH = 2M
+@}
+/*
+ * stick everything in ram (of course)
+ */
+SECTIONS
+@{
+ .text :
+ @{
+ CREATE_OBJECT_SYMBOLS
+ *(.text)
+ etext = .;
+ __CTOR_LIST__ = .;
+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
+ *(.ctors)
+ LONG(0)
+ __CTOR_END__ = .;
+ __DTOR_LIST__ = .;
+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
+ *(.dtors)
+ LONG(0)
+ __DTOR_END__ = .;
+ *(.lit)
+ *(.shdata)
+ @} > ram
+ .shbss SIZEOF(.text) + ADDR(.text) : @{
+ *(.shbss)
+ @}
+ .talias : @{ @} > ram
+ .data : @{
+ *(.data)
+ CONSTRUCTORS
+ _edata = .;
+ @} > ram
+
+ .bss SIZEOF(.data) + ADDR(.data) :
+ @{
+ __bss_start = ALIGN(0x8);
+ *(.bss)
+ *(COMMON)
+ end = ALIGN(0x8);
+ _end = ALIGN(0x8);
+ __end = ALIGN(0x8);
+ @}
+ .mstack : @{ @} > ram
+ .rstack : @{ @} > ram
+ .stab . (NOLOAD) :
+ @{
+ [ .stab ]
+ @}
+ .stabstr . (NOLOAD) :
+ @{
+ [ .stabstr ]
+ @}
+@}
+@end example
+
+@node crt0.S, glue.c, idp.ld, Code Listings
+@section crt0.S - The startup file
+
+@example
+/*
+ * crt0.S -- startup file for m68k-coff
+ *
+ */
+
+ .title "crt0.S for m68k-coff"
+
+/* These are predefined by new versions of GNU cpp. */
+
+#ifndef __USER_LABEL_PREFIX__
+#define __USER_LABEL_PREFIX__ _
+#endif
+
+#ifndef __REGISTER_PREFIX__
+#define __REGISTER_PREFIX__
+#endif
+
+/* ANSI concatenation macros. */
+
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+/* Use the right prefix for global labels. */
+
+#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+
+/* Use the right prefix for registers. */
+
+#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
+
+#define d0 REG (d0)
+#define d1 REG (d1)
+#define d2 REG (d2)
+#define d3 REG (d3)
+#define d4 REG (d4)
+#define d5 REG (d5)
+#define d6 REG (d6)
+#define d7 REG (d7)
+#define a0 REG (a0)
+#define a1 REG (a1)
+#define a2 REG (a2)
+#define a3 REG (a3)
+#define a4 REG (a4)
+#define a5 REG (a5)
+#define a6 REG (a6)
+#define fp REG (fp)
+#define sp REG (sp)
+
+/*
+ * Set up some room for a stack. We just grab a chunk of memory.
+ */
+ .set stack_size, 0x2000
+ .comm SYM (stack), stack_size
+
+/*
+ * Define an empty environment.
+ */
+ .data
+ .align 2
+SYM (environ):
+ .long 0
+
+ .align 2
+ .text
+ .global SYM (stack)
+
+ .global SYM (main)
+ .global SYM (exit)
+/*
+ * This really should be __bss_start, not SYM (__bss_start).
+ */
+ .global __bss_start
+
+/*
+ * start -- set things up so the application will run.
+ */
+SYM (start):
+ link a6, #-8
+ moveal #SYM (stack) + stack_size, sp
+
+/*
+ * zerobss -- zero out the bss section
+ */
+ moveal #__bss_start, a0
+ moveal #SYM (end), a1
+1:
+ movel #0, (a0)
+ leal 4(a0), a0
+ cmpal a0, a1
+ bne 1b
+
+/*
+ * Call the main routine from the application to get it going.
+ * main (argc, argv, environ)
+ * We pass argv as a pointer to NULL.
+ */
+ pea 0
+ pea SYM (environ)
+ pea sp@@(4)
+ pea 0
+ jsr SYM (main)
+ movel d0, sp@@-
+
+/*
+ * _exit -- Exit from the application. Normally we cause a user trap
+ * to return to the ROM monitor for another run.
+ */
+SYM (exit):
+ trap #0
+@end example
+
+@node glue.c, mvme.S, crt0.S, Code Listings
+@section C based "glue" code.
+
+@example
+
+/*
+ * glue.c -- all the code to make GCC and the libraries run on
+ * a bare target board. These should work with any
+ * target if inbyte() and outbyte() exist.
+ */
+
+#include
+#include
+#include
+#ifndef NULL
+#define NULL 0
+#endif
+
+/* FIXME: this is a hack till libc builds */
+__main()
+@{
+ return;
+@}
+
+#undef errno
+int errno;
+
+extern caddr_t _end; /* _end is set in the linker command file */
+extern int outbyte();
+extern unsigned char inbyte();
+extern int havebyte();
+
+/* just in case, most boards have at least some memory */
+#ifndef RAMSIZE
+# define RAMSIZE (caddr_t)0x100000
+#endif
+
+/*
+ * read -- read bytes from the serial port. Ignore fd, since
+ * we only have stdin.
+ */
+int
+read(fd, buf, nbytes)
+ int fd;
+ char *buf;
+ int nbytes;
+@{
+ int i = 0;
+
+ for (i = 0; i < nbytes; i++) @{
+ *(buf + i) = inbyte();
+ if ((*(buf + i) == '\n') || (*(buf + i) == '\r')) @{
+ (*(buf + i)) = 0;
+ break;
+ @}
+ @}
+ return (i);
+@}
+
+/*
+ * write -- write bytes to the serial port. Ignore fd, since
+ * stdout and stderr are the same. Since we have no filesystem,
+ * open will only return an error.
+ */
+int
+write(fd, buf, nbytes)
+ int fd;
+ char *buf;
+ int nbytes;
+@{
+ int i;
+
+ for (i = 0; i < nbytes; i++) @{
+ if (*(buf + i) == '\n') @{
+ outbyte ('\r');
+ @}
+ outbyte (*(buf + i));
+ @}
+ return (nbytes);
+@}
+
+/*
+ * open -- open a file descriptor. We don't have a filesystem, so
+ * we return an error.
+ */
+int
+open(buf, flags, mode)
+ char *buf;
+ int flags;
+ int mode;
+@{
+ errno = EIO;
+ return (-1);
+@}
+
+/*
+ * close -- close a file descriptor. We don't need
+ * to do anything, but pretend we did.
+ */
+int
+close(fd)
+ int fd;
+@{
+ return (0);
+@}
+
+/*
+ * sbrk -- changes heap size size. Get nbytes more
+ * RAM. We just increment a pointer in what's
+ * left of memory on the board.
+ */
+caddr_t
+sbrk(nbytes)
+ int nbytes;
+@{
+ static caddr_t heap_ptr = NULL;
+ caddr_t base;
+
+ if (heap_ptr == NULL) @{
+ heap_ptr = (caddr_t)&_end;
+ @}
+
+ if ((RAMSIZE - heap_ptr) >= 0) @{
+ base = heap_ptr;
+ heap_ptr += nbytes;
+ return (base);
+ @} else @{
+ errno = ENOMEM;
+ return ((caddr_t)-1);
+ @}
+@}
+
+/*
+ * isatty -- returns 1 if connected to a terminal device,
+ * returns 0 if not. Since we're hooked up to a
+ * serial port, we'll say yes and return a 1.
+ */
+int
+isatty(fd)
+ int fd;
+@{
+ return (1);
+@}
+
+/*
+ * lseek -- move read/write pointer. Since a serial port
+ * is non-seekable, we return an error.
+ */
+off_t
+lseek(fd, offset, whence)
+ int fd;
+ off_t offset;
+ int whence;
+@{
+ errno = ESPIPE;
+ return ((off_t)-1);
+@}
+
+/*
+ * fstat -- get status of a file. Since we have no file
+ * system, we just return an error.
+ */
+int
+fstat(fd, buf)
+ int fd;
+ struct stat *buf;
+@{
+ errno = EIO;
+ return (-1);
+@}
+
+/*
+ * getpid -- only one process, so just return 1.
+ */
+#define __MYPID 1
+int
+getpid()
+@{
+ return __MYPID;
+@}
+
+/*
+ * kill -- go out via exit...
+ */
+int
+kill(pid, sig)
+ int pid;
+ int sig;
+@{
+ if(pid == __MYPID)
+ _exit(sig);
+ return 0;
+@}
+
+/*
+ * print -- do a raw print of a string
+ */
+int
+print(ptr)
+char *ptr;
+@{
+ while (*ptr) @{
+ outbyte (*ptr++);
+ @}
+@}
+
+/*
+ * putnum -- print a 32 bit number in hex
+ */
+int
+putnum (num)
+unsigned int num;
+@{
+ char buffer[9];
+ int count;
+ char *bufptr = buffer;
+ int digit;
+
+ for (count = 7 ; count >= 0 ; count--) @{
+ digit = (num >> (count * 4)) & 0xf;
+
+ if (digit <= 9)
+ *bufptr++ = (char) ('0' + digit);
+ else
+ *bufptr++ = (char) ('a' - 10 + digit);
+ @}
+
+ *bufptr = (char) 0;
+ print (buffer);
+ return;
+@}
+@end example
+
+@node mvme.S, io.c, glue.c, Code Listings
+@section I/O assembler code sample
+
+@example
+/*
+ * mvme.S -- board support for m68k
+ */
+
+ .title "mvme.S for m68k-coff"
+
+/* These are predefined by new versions of GNU cpp. */
+
+#ifndef __USER_LABEL_PREFIX__
+#define __USER_LABEL_PREFIX__ _
+#endif
+
+#ifndef __REGISTER_PREFIX__
+#define __REGISTER_PREFIX__
+#endif
+
+/* ANSI concatenation macros. */
+
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+/* Use the right prefix for global labels. */
+
+#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+
+/* Use the right prefix for registers. */
+
+#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
+
+#define d0 REG (d0)
+#define d1 REG (d1)
+#define d2 REG (d2)
+#define d3 REG (d3)
+#define d4 REG (d4)
+#define d5 REG (d5)
+#define d6 REG (d6)
+#define d7 REG (d7)
+#define a0 REG (a0)
+#define a1 REG (a1)
+#define a2 REG (a2)
+#define a3 REG (a3)
+#define a4 REG (a4)
+#define a5 REG (a5)
+#define a6 REG (a6)
+#define fp REG (fp)
+#define sp REG (sp)
+#define vbr REG (vbr)
+
+ .align 2
+ .text
+ .global SYM (_exit)
+ .global SYM (outln)
+ .global SYM (outbyte)
+ .global SYM (putDebugChar)
+ .global SYM (inbyte)
+ .global SYM (getDebugChar)
+ .global SYM (havebyte)
+ .global SYM (exceptionHandler)
+
+ .set vbr_size, 0x400
+ .comm SYM (vbr_table), vbr_size
+
+/*
+ * inbyte -- get a byte from the serial port
+ * d0 - contains the byte read in
+ */
+ .align 2
+SYM (getDebugChar): /* symbol name used by m68k-stub */
+SYM (inbyte):
+ link a6, #-8
+ trap #15
+ .word inchr
+ moveb sp@@, d0
+ extbl d0
+ unlk a6
+ rts
+
+/*
+ * outbyte -- sends a byte out the serial port
+ * d0 - contains the byte to be sent
+ */
+ .align 2
+SYM (putDebugChar): /* symbol name used by m68k-stub */
+SYM (outbyte):
+ link fp, #-4
+ moveb fp@@(11), sp@@
+ trap #15
+ .word outchr
+ unlk fp
+ rts
+
+/*
+ * outln -- sends a string of bytes out the serial port with a CR/LF
+ * a0 - contains the address of the string's first byte
+ * a1 - contains the address of the string's last byte
+ */
+ .align 2
+SYM (outln):
+ link a6, #-8
+ moveml a0/a1, sp@@
+ trap #15
+ .word outln
+ unlk a6
+ rts
+
+/*
+ * outstr -- sends a string of bytes out the serial port without a CR/LF
+ * a0 - contains the address of the string's first byte
+ * a1 - contains the address of the string's last byte
+ */
+ .align 2
+SYM (outstr):
+ link a6, #-8
+ moveml a0/a1, sp@@
+ trap #15
+ .word outstr
+ unlk a6
+ rts
+
+/*
+ * havebyte -- checks to see if there is a byte in the serial port,
+ * returns 1 if there is a byte, 0 otherwise.
+ */
+SYM (havebyte):
+ trap #15
+ .word instat
+ beqs empty
+ movel #1, d0
+ rts
+empty:
+ movel #0, d0
+ rts
+
+/*
+ * These constants are for the MVME-135 board's boot monitor. They
+ * are used with a TRAP #15 call to access the monitor's I/O routines.
+ * they must be in the word following the trap call.
+ */
+ .set inchr, 0x0
+ .set instat, 0x1
+ .set inln, 0x2
+ .set readstr, 0x3
+ .set readln, 0x4
+ .set chkbrk, 0x5
+
+ .set outchr, 0x20
+ .set outstr, 0x21
+ .set outln, 0x22
+ .set write, 0x23
+ .set writeln, 0x24
+ .set writdln, 0x25
+ .set pcrlf, 0x26
+ .set eraseln, 0x27
+ .set writd, 0x28
+ .set sndbrk, 0x29
+
+ .set tm_ini, 0x40
+ .set dt_ini, 0x42
+ .set tm_disp, 0x43
+ .set tm_rd, 0x44
+
+ .set redir, 0x60
+ .set redir_i, 0x61
+ .set redir_o, 0x62
+ .set return, 0x63
+ .set bindec, 0x64
+
+ .set changev, 0x67
+ .set strcmp, 0x68
+ .set mulu32, 0x69
+ .set divu32, 0x6A
+ .set chk_sum, 0x6B
+
+@end example
+
+@node io.c, leds.c, mvme.S, Code Listings
+@section I/O code sample
+
+@example
+#include "w89k.h"
+
+/*
+ * outbyte -- shove a byte out the serial port. We wait till the byte
+ */
+int
+outbyte(byte)
+ unsigned char byte;
+@{
+ while ((inp(RS232REG) & TRANSMIT) == 0x0) @{ @} ;
+ return (outp(RS232PORT, byte));
+@}
+
+/*
+ * inbyte -- get a byte from the serial port
+ */
+unsigned char
+inbyte()
+@{
+ while ((inp(RS232REG) & RECEIVE) == 0x0) @{ @};
+ return (inp(RS232PORT));
+@}
+@end example
+
+@node leds.c, ,io.c, Code Listings
+@section Led control sample
+
+@example
+/*
+ * leds.h -- control the led's on a Motorola mc68ec0x0 board.
+ */
+
+#ifndef __LEDS_H__
+#define __LEDS_H__
+
+#define LED_ADDR 0xd00003
+#define LED_0 ~0x1
+#define LED_1 ~0x2
+#define LED_2 ~0x4
+#define LED_3 ~0x8
+#define LED_4 ~0x10
+#define LED_5 ~0x20
+#define LED_6 ~0x40
+#define LED_7 ~0x80
+#define LEDS_OFF 0xff
+#define LEDS_ON 0x0
+
+#define FUDGE(x) ((x >= 0xa && x <= 0xf) ? (x + 'a') & 0x7f : (x + '0') & 0x7f)
+
+extern void led_putnum( char );
+
+#endif /* __LEDS_H__ */
+
+/*
+ * leds.c -- control the led's on a Motorola mc68ec0x0 (IDP)board.
+ */
+#include "leds.h"
+
+void zylons();
+void led_putnum();
+
+/*
+ * led_putnum -- print a hex number on the LED. the value of num must be a char with
+ * the ascii value. ie... number 0 is '0', a is 'a', ' ' (null) clears
+ * the led display.
+ * Setting the bit to 0 turns it on, 1 turns it off.
+ * the LED's are controlled by setting the right bit mask in the base
+ * address.
+ * The bits are:
+ * [d.p | g | f | e | d | c | b | a ] is the byte.
+ *
+ * The locations are:
+ *
+ * a
+ * -----
+ * f | | b
+ * | g |
+ * -----
+ * | |
+ * e | | c
+ * -----
+ * d . d.p (decimal point)
+ */
+void
+led_putnum ( num )
+char num;
+@{
+ static unsigned char *leds = (unsigned char *)LED_ADDR;
+ static unsigned char num_bits [18] = @{
+ 0xff, /* clear all */
+ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98, /* numbers 0-9 */
+ 0x98, 0x20, 0x3, 0x27, 0x21, 0x4, 0xe /* letters a-f */
+ @};
+
+ if (num >= '0' && num <= '9')
+ num = (num - '0') + 1;
+
+ if (num >= 'a' && num <= 'f')
+ num = (num - 'a') + 12;
+
+ if (num == ' ')
+ num = 0;
+
+ *leds = num_bits[num];
+@}
+
+/*
+ * zylons -- draw a rotating pattern. NOTE: this function never returns.
+ */
+void
+zylons()
+@{
+ unsigned char *leds = (unsigned char *)LED_ADDR;
+ unsigned char curled = 0xfe;
+
+ while (1)
+ @{
+ *leds = curled;
+ curled = (curled >> 1) | (curled << 7);
+ delay ( 200 );
+ @}
+@}
+@end example
+
+@page
+@contents
+@c second page break makes sure right-left page alignment works right
+@c with a one-page toc, even though we don't have setchapternewpage odd.
+@page
+@bye
porting.texi
Property changes :
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property