#! /bin/sh

# This is the config.site file for configuring GNU packages
# which are to be built with DJGPP tools.

# Include the djgpp subdirectory in PATH, so that getconf is found
PATH="$srcdir/djgpp:$PATH"

# These two variables are required, otherwise looking for
# programs along the PATH will not work.
PATH_SEPARATOR=:
PATH_EXPAND=y

# This is required in for "test -f foo" to find foo.exe
export TEST_FINDS_EXE=y

# The root of the DJGPP tree serves as the default prefix
# for all paths that are hardcoded in the binaries.
# When installing the installation prefix must be supplied.
test "x$prefix" = xNONE && prefix='/dev/env/DJDIR'

# This is required for config.status script to be run, since
# ./configure runs it by invoking ${CONFIG_SHELL-/bin/sh}
CONFIG_SHELL=${CONFIG_SHELL='sh'}

# These are set here so the generated Makefile's will be good
# for every DJGPP installation, not only the one where the
# package was configured.
# $INSTALL must be an absolute path name, otherwise config.status
# will try to prepend ./ and ../ to it when it goes into subdirs.
INSTALL=${INSTALL='/dev/env/DJDIR/bin/ginstall -c'}
RANLIB=${RANLIB='/dev/env/DJDIR/bin/ranlib'}
GMSGFMT=${GMSGFMT='/dev/env/DJDIR/bin/msgfmt'}
MSGFMT=${MSGFMT='/dev/env/DJDIR/bin/msgfmt'}
XGETTEXT=${XGETTEXT='/dev/env/DJDIR/bin/xgettext'}

# A sane default for emacs.
ac_cv_path_EMACS=${EMACS='/dev/env/DJDIR/gnu/emacs/bin/emacs'}

# A sane default for grep.
ac_cv_path_GREP=${GREP='grep'}
ac_cv_path_EGREP=${EGREP='egrep'}
ac_cv_path_FGREP=${FGREP='fgrep'}

# These are set here so the generated libtool will be good
# for every DJGPP installation, not only the one where the
# package was configured.
NM=${NM='/dev/env/DJDIR/bin/nm'}
LD=${LD='/dev/env/DJDIR/bin/ld'}
STRIP=${STRIP='/dev/env/DJDIR/bin/strip'}
lt_cv_path_SED=${SED='/dev/env/DJDIR/bin/sed'}

# Force the test for 'ln -s' to report no.
ac_cv_prog_LN_S='cp -p'
cl_cv_prog_LN_S='cp -p'
cl_cv_prog_LN='cp -p'

# DJGPP needs ICONV_CONST set to const
am_cv_proto_iconv_arg1="const"
